Войти
ФлеймФорумОбщее

JS отослать post на несколько URL

#0
16:58, 2 ноя 2011

Собственно сабж
При отсылки формы нужно, что информация ушла на несколько URL, но кнопку отправки нажимать можно один раз. Собственно нужно Javascript как-то оправить данные на несколько URL за одно нажатие по кнопке от пользователя.

#1
17:01, 2 ноя 2011

Если только сделать еще несколько скрытых форм и скопировать в них данные перед отправкой

#2
17:05, 2 ноя 2011

XMLHttpRequest в руки - и в добрый путь!

#3
17:56, 2 ноя 2011

=A=L=X=
> XMLHttpRequest в руки - и в добрый путь!
лучше так

function getXMLHttp()
{
  var XMLHttp = null;
  if(window.XMLHttpRequest)
  {
    try
    {
      XMLHttp = new XMLHttpRequest();
    }
    catch(e){}
  }
  else if(window.ActiveXObject)
  {
    try
    {
      XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
      try
      {
        XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch(e){}
    }    
  }
  return XMLHttp;
}
#4
17:57, 2 ноя 2011

Если целевые скрипты располагаются в одном домене, то всё просто.
А если в разных, то это XSS и надо извращаться. :)

#5
20:06, 2 ноя 2011

может ерунду напишу он
сделал бы скрытый фрейм
естественно сама форма у которой target на тот фрейм
кнопка отправки лишь вызывает js код
в коде в цикле или как то по другому
менял бы у у формы action на нужный
отправлял форму через фрейм
как то так

#6
23:11, 2 ноя 2011

Все ок сделал через getXMLHttp
но есть одно но - не могу понять: почему новые строки не добавляются в документ после того как возвращается подтверждение запроса ?

если сделать вот так

j++;
//асинхронный
httpArray[j] = getXmlHttp();
httpArray[j].open('GET', document.links[i].href +'&action=close', true);
httpArray[j].onreadystatechange = function() {
  if (httpArray[j].readyState == 4) {
     if(httpArray[j].status == 200) {
       //alert(xmlhttp.responseText);
     document.body.innerHTML+=document.links[i].href + '->OK'
         }
  }
};
httpArray[j].send(null);


k = 0;
  }
k++;  
  }
 }

этот JS работает как плагин в Ghrome может из-за этого есть какие-то ограничения ?

#7
23:21, 2 ноя 2011

В цикл что ли всё это поместил? А ты уверен, что "i" в document.links[ i].href где-то запоминается?
Ответы-то приходят асинхронно. Думаю, никакого i в контексте функции на тот момент уже не существует.

#8
0:17, 3 ноя 2011

Сейчас просто прописал  document.body.innerHTML+='->OK' и как в рулетке (до сервера всегда доходит информация), а вот информация о доставке не всегда например вместо 20 может быть прописано 13, может время ожидания нужно как-то увеличить ?

#9
12:10, 3 ноя 2011

i и j вследствие асинхронности и затирания в цикле не сохраняются, факт. Лучче так:

httpArray[j].onreadystatechange = function (i,j) {
  return function() {
  if (httpArray[j].readyState == 4) {
     if(httpArray[j].status == 200) {
       //alert(xmlhttp.responseText);
     document.body.innerHTML+=document.links[i].href + '->OK' // и ещё лучче так вместо '->', ибо хтмл же
         }
  }
} } (i,j);
#10
16:08, 3 ноя 2011

Если есть jQuery, а его вероятно нет, то можно использовать

function clickMe() {
$.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
 });
$.ajax({
   type: "POST",
   url: "some_other.php",
   data: "name=John&location=Moscow",
   success: function(msg){
     alert( "Happy Birthday, dammit");
   }
 });
}
#11
20:14, 3 ноя 2011

Спасибо всем все что хотел получилось :)

#12
12:43, 16 апр 2012

Слушайте, а как  заставить весь код работать  в отдельном процессе, а то все изменилось и теперь асинхронно к этому серверу особо не обратишься у него теперь ограничение на очередь запросов, и теперь я делаю все не асинхронно, но из-за этого страница весит и браузер то и дело спрашивает остановить или подождать выполнение скрипта. Вот и появилась идея весь код засунуть в отдельный поток чтоб не подвисал...

#13
12:54, 16 апр 2012

Kavis

Заводишь очередь мессаг, обработчик отправляет первую асинхронно а в реакции на выполнение запроса запускает следующий из очереди пакет и так далее.

#14
13:13, 16 апр 2012

Ну да, помещаешь следующий вызов в колбек предыдущего и всё.
Хотя я даже представить боюсь, зачем тебе понадобилось столько запросов.
Не лучше ли как-то объединять их на клиенте и тормошить сервер не чаще,
чем раз в две-три секунды.

ФлеймФорумОбщее

Тема в архиве.