Ответ JQuery AJAX с 200, но без данных ответа, для некоторого удаленного URL - PullRequest
0 голосов
/ 03 октября 2011

Существует несколько вопросов по переполнению стека, в которых говорится, что междоменный запрос AJAX и т. Д. Не будет работать из-за соображений безопасности. Некоторые вопросы, такие как , это объясняют это. (Пожалуйста, дайте мне знать, если я ошибаюсь.)

Это прекрасно работает:

$(document).ready(function() { 
  $.getJSON("http://search.twitter.com/search.json?q=test&callback=?", function(data) {
    alert("test alert outside loop");
    $.each(data.results, function() {
      alert("test alert inside loop");
    });
  });
});

Но простая замена URL моим приложением не сработает. В этом случае код ответа 200, но данных ответа нет. В моем приложении есть хит; Я вижу это в консоли.

$(document).ready(function() { 
  $.getJSON("http://192.168.1.2:3000/cities.json?callback=?", function(data) {
    alert("test alert outside loop");
    $.each(data.results, function() {
      alert("test alert inside loop");
    });
  });
});

Я разрабатываю очень простое мобильное приложение с использованием PhoneGap, поэтому мне нужно сделать этот вызов с помощью JavaScript. Но главное, что меня смущает, это то, почему звонок в Twitter работает, а звонок в мое приложение - нет. Я также пытался удалить вызов protect_from_forgery в контроллере приложения в приложении Rails, но я не думаю, что это имеет значение.

EDIT

Я развернул приложение на http://deals.textadda.com/cities.json, теперь проверьте его ... Не работает ..

Вы можете попробовать это. эти две ссылки http://jsfiddle.net/2arbY/ http://jsfiddle.net/fHxf9/

Ответы [ 3 ]

1 голос
/ 03 октября 2011

вы сталкиваетесь с междоменными проблемами из-за same-origin-policy ip, с которого вы пытаетесь получить json, должен находиться на том же сервере, с которого вы отправляете запрос.

попробуйте использовать

 $.getJSON("192.168.1.2/cities.json?callback=?", func
1 голос
/ 04 октября 2011

Проблема в том, что этот удаленный сервер возвращает JSON, а не JSONP. Возвращает:

{"lines":[{"line":"COLOMBO - BADULLA"},{"line":"COLOMBO - MATALE"},{"line":"COLOMBO - PUTTLAM"},{"line":"COLOMBO - THANDIKULAM"},{"line":"COLOMBO - TALAIMANNAR"},{"line":"COLOMBO - BATTICALOA"},{"line":"COLOMBO - TRINCOMALEE"},{"line":"COLOMBO - MATARA"},{"line":"COLOMBO - AVISSAWELLA"},{"line":"COLOMBO - MIHINTALE"}]}

вместо:

someCallbackName({"lines":[{"line":"COLOMBO - BADULLA"},{"line":"COLOMBO - MATALE"},{"line":"COLOMBO - PUTTLAM"},{"line":"COLOMBO - THANDIKULAM"},{"line":"COLOMBO - TALAIMANNAR"},{"line":"COLOMBO - BATTICALOA"},{"line":"COLOMBO - TRINCOMALEE"},{"line":"COLOMBO - MATARA"},{"line":"COLOMBO - AVISSAWELLA"},{"line":"COLOMBO - MIHINTALE"}]})

Вот почему я не смог использовать удаленный домен с использованием AJAX, если этот удаленный ресурс не поддерживает JSONP.

1 голос
/ 03 октября 2011

Вероятно, data.results не существует, даже если data существует.Что вы получите, если вы alert(data); (или console.log(data);) вне цикла?

EDIT

Ваше приложение не создает оболочку обратного вызова.Например, http://deals.textadda.com/cities.json?callback=abc должен сгенерировать объект JSON, заключенный в вызов функции abc, таким же образом, например, ответ Twitter: http://search.twitter.com/search.json?q=test&callback=abc.

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