2010-11-20 2 views
0

У меня есть следующая проблема. Мне нужно создать виджет 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? Я не понимаю, что этот класс работает. Может ли кто-нибудь показать мне лучший пример?

ответ

0

Есть два основных варианта:

  1. положить IFRAME, где вы хотите виджет идти. Его URL-адрес src будет на том же сервере, который получит вызов AJAX.

  2. Используйте JSONP, который состоит из вставки тега сценария на страницу, чтобы обойти политику одного и того же происхождения. Это требует, чтобы сервер AJAX переносил свой вывод JSON в ?(...), где URL-адрес содержит callback=?. Затем, как только будет получен ответ, запустите другой запрос.

+0

Hi idealmachine, спасибо. Это с iframe мне это не нравится :-(Что, если я отправлю ответ с сервера в кусках. Возможно ли, что JavaScript получает ответ до тех пор, пока ответ не будет завершен и не отобразит каждый фрагмент? – Nik

+0

@Nik: I не верьте, что вы можете получить данные с помощью JSONP до тех пор, пока весь ответ не будет загружен. Вот почему я сказал, чтобы отправлять короткие ответы (даже когда нужно показывать только одно сообщение), а затем запускать другой запрос для получения любых последующих сообщений. – PleaseStand

+0

Если вы не хотите использовать iframe, прочитайте http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest. Вы можете использовать окно.postMessage' (в новых браузерах), чтобы иметь возможность скрывать iframe, но вам придется иметь дело со своими собственными причудами. – PleaseStand