У меня есть следующая проблема. Мне нужно создать виджет JS и установить его в одном блоге, например, в любом блоге с blogger.com. Вы можете выбрать там ящик для javascript, и я отправлю JS в этом поле.С JavaScript Ajax опрос для виджета
Проблема, что у меня есть и не знаю, как это сделать, заключается в том, что скрипт должен выполнить ajax-опрос для exmaple в течение 60 секунд. Но как выполнить вызов ajax, когда хост не совпадает с хостом, где JS является включенным?
Например, самый простой способ объяснения: есть окно поиска, и когда enayone выполняет поиск anythign, тогда сценарий JS должен передавать результаты на 60 секунд с сервера, что я установил в скрипте, и отличается от хост, где JS входит в комплект, без каких-либо проблем с ограничением JS для хостов.
Или, например, клиент чата, где клиент размещен на другом хосте, а сервер - на другом.
Может ли кто-нибудь рассказать мне об этом идею или отправить мне пример, как это сделать?
Благодаря Nik
Ну с этим примером является возможным, но без JSONP?
function asyncreq(url) {
var xmlhttp = false;
try {
xmlhttp = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
xmlhttp = false;
}
}
}
if (xmlhttp){
try {
xmlhttp.open("GET", url);
xmlhttp.onreadystatechange=function() {
document.getElementById('mydiv').innerHTML = xmlhttp.responseText;
}
xmlhttp.send(null);
}
catch (failed) {
xmlhttp = false;
}
}
}
Если вы отправляете ответ в кусках, то все в порядке. Но вот вызов в ajax снова. И когда я использую его на другом хосте, я не могу вызывать URL-адрес из-за политики того же происхождения.
Есть ли другой способ?
Я нашел очень интересный пример here.
Взгляните на нижнюю часть, есть окно поиска работы. Если вы исследуете бит litte, вы увидите, что используется класс RSL(), который выполняет запрос. Как этот класс выполняет запрос без ajax? Я не понимаю, что этот класс работает. Может ли кто-нибудь показать мне лучший пример?
Hi idealmachine, спасибо. Это с iframe мне это не нравится :-(Что, если я отправлю ответ с сервера в кусках. Возможно ли, что JavaScript получает ответ до тех пор, пока ответ не будет завершен и не отобразит каждый фрагмент? – Nik
@Nik: I не верьте, что вы можете получить данные с помощью JSONP до тех пор, пока весь ответ не будет загружен. Вот почему я сказал, чтобы отправлять короткие ответы (даже когда нужно показывать только одно сообщение), а затем запускать другой запрос для получения любых последующих сообщений. – PleaseStand
Если вы не хотите использовать iframe, прочитайте http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest. Вы можете использовать окно.postMessage' (в новых браузерах), чтобы иметь возможность скрывать iframe, но вам придется иметь дело со своими собственными причудами. – PleaseStand