对于某些远程URL,JQuery AJAX响应200,但没有响应数据

时间:2011-10-03 09:10:52

标签: ruby-on-rails json jquery cross-domain

Stack Overflow上有几个问题,说由于安全原因,跨域AJAX请求等不起作用。像this explain这样的一些问题。 (如果我错了,请告诉我。)

这非常合适:

$(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电话有效,但对我的应用程序的调用却没有。我还尝试在我的Rails应用程序中删除应用程序控制器中的protect_from_forgery调用,但我认为这并不重要。

修改

我已经在http://deals.textadda.com/cities.json上部署了应用程序,现在检查一下......它无法正常工作..

你可以尝试一下。这两个链接http://jsfiddle.net/2arbY/ http://jsfiddle.net/fHxf9/

3 个答案:

答案 0 :(得分:1)

即使data.resultsdata,也可能不存在alert(data);。如果您在循环外console.log(data);(或abc),您会得到什么?

修改

您的应用未生成回调包装器。例如,http://deals.textadda.com/cities.json?callback=abc应该生成一个包含在{{1}}函数调用中的JSON对象,例如,twitter响应会执行:http://search.twitter.com/search.json?q=test&callback=abc

答案 1 :(得分:1)

由于same-origin-policy您尝试获取json的ip应该驻留在您发起请求的同一服务器上,因此您遇到跨域问题。

尝试使用

 $.getJSON("192.168.1.2/cities.json?callback=?", func

答案 2 :(得分:1)

问题是这个远程服务器返回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。