jQuery Ajax POST не удался

Я не могу успешно опубликовать сообщение с помощью функции jquery ajax.

URL-адрес текущей страницы — http://localhost:9999, URL-адрес цели (веб-сервиса) — http://localhost:8080. Нет, порты разные, это 9999 и 8080 соответственно.

Ниже приведен запрос и код jquery ajax.

Запрос:

OPTIONS /profile/set_member HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://localhost:9999
Access-Control-Request-Method: POST

JQuery-код ajax:

$.ajax({ 
        type: "POST", url: "http://localhost:8080/profile/set_member", 
        contentType: "application/json", data: member, 
        error: function(){ alert('Update failed!'); }, 
        processData: false, 
        success: function(){ alert('Update successful!'); }
});

person Mads610    schedule 27.08.2010    source источник
comment
Вы пишете с того же домена?   -  person BrunoLM    schedule 27.08.2010
comment
Какой URL-адрес работающей страницы?   -  person Nick Craver    schedule 27.08.2010


Ответы (3)


Это проблема с междоменными вызовами ajax. В основном (по крайней мере, в Firefox) запрос POST преобразуется в запрос OPTIONS по соображениям безопасности. Прошлой ночью я столкнулся с той же точной вещью, опубликованной здесь.

Вызов WCF Ajax не работает с Jquery $.ajax

У меня был вызов $.ajax, который я делал на localhost:23485, к веб-службе на http://localhost, размещенной в IIS. . Поскольку это разные домены, вмешался междоменный подход, который усложнил задачу.

person Dusda    schedule 27.08.2010
comment
Более раздражающим признаком является то, что вызов $.ajax часто сообщает об успешном выполнении этого конкретного вызова, даже если на самом деле он не работает. - person Dusda; 27.08.2010
comment
Кроме того, глядя на заголовок вашего запроса, я вижу, что адреса источника и хоста являются локальными, но с разных портов. Точно то же самое, с чем я столкнулся прошлой ночью :(. - person Dusda; 27.08.2010
comment
@Dusda: Ты прав, это та же проблема. По-видимому, «единственное» решение состоит в том, чтобы иметь прокси-сервер между вызовом ajax и веб-службой. - person Mads610; 27.08.2010
comment
@Mads610, не обязательно. Вы можете воспользоваться спецификацией JSONP: ajaxian.com/archives/jsonp-json-with -заполнение. Я сделал эту работу несколько раз раньше. - person Chris Thompson; 27.08.2010
comment
Крис прав; вы можете использовать jsonp для междоменных вызовов. Просто требует немного больше работы. - person Dusda; 28.08.2010
comment
Да, особенно если у вас есть доступ к коду на другом сервере. - person Vivin Paliath; 29.08.2010

Сделайте прокси в том же домене, в котором вы вызываете ajax, например. в PHP:

<?php /* get.php */
    $url = $_GET["Url"];
    echo file_get_contents($url);
?>

Сделайте свой ajax-вызов:

$.ajax({ url: "get.php?Url=realurl.com" });

Это один обходной путь.

person BrunoLM    schedule 27.08.2010

Какой обработчик вызывается? Обработчик success или error? Можно уточнить, что значит "не работает"?

Вероятно, вам нужно alert больше информации в вашем error обработчике, например:

error: function(XMLHttpRequest, textStatus, errorThrown) {
   //console.log is better at least for debugging. You can change this back to alert 
   //when your code goes into production
   console.log("Update unsuccessful. Status: ", textStatus, " error thrown: ", errorThrown);
}

textStatus должен дать вам представление о том, в чем может быть проблема. Возможные значения: "timeout", "error", "notmodified" и "parsererror". Как только вы выясните фактическую ошибку, обновите вопрос.

Также, если у вас есть Firebug, проверьте вкладку «Сеть», чтобы увидеть запрос и ответ. Несколько распространенных источников ошибок:

  • Нарушение политики одного и того же происхождения. Вы не можете сделать AJAX для другого URL-адреса с родительской страницы.
  • Ошибки на стороне сервера. Если ваш сервер возвращает что-то вроде кода ответа 500, запрос не будет выполнен.
  • Ошибки парсинга. Если вы ожидаете определенный формат ответа, такой как json или xml, и если ответ не в этом формате, запрос AJAX будет неудачным.
person Vivin Paliath    schedule 27.08.2010