繁体   English   中英

crossDomain jQuery Ajax无法获取json

[英]crossDomain jquery ajax not getting json

我只是创建了一个Rails 3.0支架并使用json对其进行了公开,并使其保持运行状态。

所以如果我打http:// localhost:3001 / objects.json

我在浏览器中看到json数据

接下来,我有一个纯HTML,其中包含code.jquery.com/jquery-1.7.min.js。 我在firefox(ubuntu)中打开了此页面,然后打开了firebug控制台并尝试了以下操作

var myurl = 'http://localhost:3001/objects.json';

$.ajax({
url: myurl,
dataType: 'jsonp',
error: function(data){ console.log("error:"+data); console.log("error:"+data.readyState); },
success: function(data){ console.log("success:"+data); }
});

我想在成功处理程序中获取相同的json,到目前为止,我观察到的是

如果指定dataType:'jsonp'

  1. 我确实得到json响应(已通过firebug:Net检查),与在浏览器中看到的相同
  2. 我没有得到成功的称呼
  3. 我确实收到错误消息,状态代码= 4,状态=“成功”

否则我得到

响应空白

还有一件事,每当我退回200时。

任何提示...这里发生了什么?

添加我的服务器端代码和日志

代码=>

# GET /objects
# GET /objects.json
def index
  @objects = Object.all

  respond_to do |format|
    format.html # index.html.erb
    format.json  {
      render :json => @objects.to_json, :layout => nil
      }
  end
end

日志样本=>

Started GET "/objects.json?callback=jQuery17024293556233345082_1321347517236&_=1321347853199" for 127.0.0.1 at 2011-11-15 14:34:13 +0530
  Processing by objectsController#index as JSON
  Parameters: {"callback"=>"jQuery17024293556233345082_1321347517236",     "_"=>"1321347853199"}
  [1m[35mobject Load (0.1ms)[0m  SELECT `objects`.* FROM `objects`
Completed 200 OK in 11ms (Views: 5.4ms | ActiveRecord: 0.1ms)

我认为您使用$.getJSON可能更好

也许您返回错误的Content-type (不是jsonp)的结果。 如果您想让jQuery触发“成功”事件,而不管Content-type为何,请从ajax选项中删除dataType参数

首先,我猜应该是Object.all

我假设您请求的服务器与为您提供JSON数据的服务器不同。 即在这种情况下,不同的端口,否则我不需要使用JSONP。

JSONP不是ajax,但在脚本标签中使用src属性。 如果您尝试从同一服务器访问信息,则应该使用dataType: json

如果您要从其他服务器上获取信息,建议您在URL流的末尾添加?callback=?

使用Jquery $ .getJSON应该是要走的路。 例如

$.getJSON(url, data, function(response){
// Do something with response; });

参考http://api.jquery.com/jQuery.getJSON/

关于您的最后评论,请使用此格式。



$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
  {
    tags: "cat",
    tagmode: "any",
    format: "json"
  },
  function(data) {
    $.each(data.items, function(i,item){});

  });

更新刚刚记住这一点,如果您同时控制两个服务器,是否正在发送JSONP响应? 如果这是您的JSON数据


response = { status:'success', message:'Successfully created object'}

要将其作为JSONP发送,您必须将其包装在function()中。 喜欢


jsoncallback + "(" + JSON.stringify(response)  + ");";

它的作用是执行Jquery生成的功能(在指定的callback =?内部完成。您可以通过检查localhost:3001日志来获取值),并将JSON数据作为参数传递给它。

因此,如果在服务器端您没有生成JSON-P响应,它将无法正常工作。

我们曾经遇到过类似的问题,尽管使用了json,而不是jsonp。 这不是一个跨域问题。 依靠我的记忆,我相信我们必须从控制器中删除response_to并提供:status => 200来呈现使它起作用的方法。 我不太确定,但是您可以试一试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM