Междоменный запрос javascript ajax - статус 200 в порядке, но нет ответа - PullRequest
4 голосов
/ 12 августа 2011

Вот моя ситуация: я создаю виджет, который администраторы сайта могут встраивать на свой сайт, а данные хранятся на моем сервере.Таким образом, скрипт должен сделать ajax-запрос к файлу php на моем сервере, чтобы обновить базу данных.Правильно?Верно :) Ajax-запрос отлично работает , когда я запускаю его на моем локальном сервере , но он не работает , когда php-файл находится на моем ONLINE сервер.Это код, который я использую:

var url = "http://www.mydomain.net/ajax_php.php";
var params = "com=ins&id=1&mail=mymail@site.net";
http.async = true;
http.open("POST", url, true);       

http.onreadystatechange = function() {

    if(http.readyState == 4 && http.status == 200) {

    //do my things here
    alert( http.responseText ); 

    }
}
http.send(params);

В firebug он показывает: http://www.mydomain.net/ajax_php.php 200 OK X 600 мс.

Когда я проверяю ajax respnseText, я всегда получаю статус:0

Теперь мой вопрос: «Могу ли я выполнять междоменные запросы AJAX по умолчанию? Может ли это быть междоменной проблемой AJAX? Так как это работает, когда запрошенный файл находится на моем локальном сервере, но НЕ ДЕЛАЕТработать, когда запрошенный файл находится на другом сервере, я думаю, что запросы ajax на другой удаленный сервер могут быть отклонены? Можете ли вы помочь мне прояснить это? Спасибо ..

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Междоменные запросы не разрешены напрямую.Тем не менее, существует широко используемая методика JSONP , которая позволит вам избежать этого ограничения с помощью тегов сценария.По сути, вы создаете функцию обратного вызова с известным именем:

function receiveData(data) {
    // ...
}

, а затем ваш сервер упаковывает данные JSON в вызов функции, например:

receiveData({"the": "data"});

И вы "вызываете"междоменный сервер, добавив тег script на свою страницу.jQuery элегантно оборачивает все это в свою функцию ajax.

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

0 голосов
/ 12 августа 2011

Вам понадобится, чтобы ваш ответ был отправлен обратно вашему клиенту с помощью JSONP звонка.

Что вам нужно сделать, это уложить ваш запрос на передачу данныхв теге скрипта.Ваш сервер ответит вашими данными, завернутыми в вызов функции.Загрузив сценарий в качестве внешнего ресурса, ваш браузер выполнит сценарий (как добавление ссылки на внешний файл JS, например, jQuery) и передаст данные известному методу JS.Затем ваш метод JS возьмет данные и сделает с ними все, что вам нужно.

Множество шагов.Использование библиотеки типа jQuery обеспечивает большую поддержку для этого.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...