Собственно сабж
При отсылки формы нужно, что информация ушла на несколько URL, но кнопку отправки нажимать можно один раз. Собственно нужно Javascript как-то оправить данные на несколько URL за одно нажатие по кнопке от пользователя.
Если только сделать еще несколько скрытых форм и скопировать в них данные перед отправкой
XMLHttpRequest в руки - и в добрый путь!
=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; }
Если целевые скрипты располагаются в одном домене, то всё просто.
А если в разных, то это XSS и надо извращаться. :)
может ерунду напишу он
сделал бы скрытый фрейм
естественно сама форма у которой target на тот фрейм
кнопка отправки лишь вызывает js код
в коде в цикле или как то по другому
менял бы у у формы action на нужный
отправлял форму через фрейм
как то так
Все ок сделал через 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 может из-за этого есть какие-то ограничения ?
В цикл что ли всё это поместил? А ты уверен, что "i" в document.links[ i].href где-то запоминается?
Ответы-то приходят асинхронно. Думаю, никакого i в контексте функции на тот момент уже не существует.
Сейчас просто прописал document.body.innerHTML+='->OK' и как в рулетке (до сервера всегда доходит информация), а вот информация о доставке не всегда например вместо 20 может быть прописано 13, может время ожидания нужно как-то увеличить ?
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);
Если есть 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"); } }); }
Спасибо всем все что хотел получилось :)
Слушайте, а как заставить весь код работать в отдельном процессе, а то все изменилось и теперь асинхронно к этому серверу особо не обратишься у него теперь ограничение на очередь запросов, и теперь я делаю все не асинхронно, но из-за этого страница весит и браузер то и дело спрашивает остановить или подождать выполнение скрипта. Вот и появилась идея весь код засунуть в отдельный поток чтоб не подвисал...
Kavis
Заводишь очередь мессаг, обработчик отправляет первую асинхронно а в реакции на выполнение запроса запускает следующий из очереди пакет и так далее.
Ну да, помещаешь следующий вызов в колбек предыдущего и всё.
Хотя я даже представить боюсь, зачем тебе понадобилось столько запросов.
Не лучше ли как-то объединять их на клиенте и тормошить сервер не чаще,
чем раз в две-три секунды.
Тема в архиве.