2013-11-25 2 views
0

Вот мой JQuery Ajax кодаJQuery AJAX не получает успех функцию обратного вызова

$(document).ready(function() { 

      $("#submitService").click(function(){ 
       alert("Before ajax"); 
      $.ajax({ 
       type: "GET", 
       url: "http://api.openweathermap.org/data/2.5/weather?q=London,uk", 
       headers: {"accept": "application/json"}, 
      success: function (dataItem) { 
       alert("Success.."); 
      }, 
      complete: function (dataItem) { 
       alert("Completed"); 
      }, 
       error: function (dataItem) { 
       alert("Error in making engine call."+dataItem); 
       } 
      }); 
      alert("After ajax"); 

      });     //click() 
     }); 

Когда моя кнопка нажата она входит в [полный] и [ошибку] ​​перезвонят методы, но не «успех "метод обратного вызова. Как я могу узнать, что такое ошибка?

Я попытался свернуться то же самое утверждение, и я получаю правильный ответ:

curl "http://api.openweathermap.org/data/2.5/weather?q=London,uk" -H "accept: application/json" 

Я использую JQuery 1.7.2

<script type="text/javascript" src='<spring:url value="/resources/jquery/js/jquery-1.7.2.min.js"/>'></script> 

В FireBug это показывает, что запрос с 200 OK, но нет тела ответа. Но я вижу тело ответа, когда делаю это через завиток.

В чем может быть проблема? Thanks

ответ

3

Я думаю, это проблема с кодировкой URL. Заменить запятую , с кодированием %2C

url: "http://api.openweathermap.org/data/2.5/weather?q=London%2Cuk" 
+0

спасибо! но вызов вызова еще не вызывается, даже если я заменяю,% 2C – Rose

+0

Да, у вас есть проблема «Без доступа-Контроль-Разрешить-Происхождение». – Masudul

+0

похоже, что мне нужно изменить конфигурацию удаленного сервера, чтобы добавить Access-Control-Allow-Origin: * в качестве части ответа. Правильно? Предполагая, что у меня есть контроль над сервером. В противном случае, как я могу это решить? – Rose

1

Отменить событие щелчка

$("#submitService").click(function(e){ 
    e.preventDeault(); 
    ... 

и пусть JQuery сделать правильную кодировку URL

type: "GET", 
url: "http://api.openweathermap.org/data/2.5/weather", 
data: {q : "London,uk" }, 

и, надеюсь, служба и ваш браузер и поддержка CORS, так как это вопрос Same Origin Policy.

+0

Этот тоже не работает. Я добавил параметр e в функцию, затем e.preventDefault(); И отделил часть данных запроса от URL-адреса. Все еще успех не называется. – Rose

1

Вы заметили, что в вызове Api нет разрешения на доступ?

Я получил это на хроме

XMLHttpRequest не может загрузить http://api.openweathermap.org/data/2.5/weather?q=London,uk. Нет Заголовок «Access-Control-Allow-Origin» присутствует на запрошенном ресурсе . Происхождение 'http://jquery.com', следовательно, не допускается.

Я думаю, что у вас есть проблема с сценарием на разных сайтах.

+0

Спасибо, Нитин, я думаю, что вокруг нет работы. Я планирую сделать запрос на свой сервер и сделать вызов с моего сервера, а не с javascript. Мое понимание - это ограничение только для js, вызывающих вызовы, а не java, вызывающих вызовы с сервера. Я прав? – Rose

0

изменить приложение/json к применению/x-www-form-urlencoded

Смежные вопросы