[英]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'
否则我得到
响应空白
还有一件事,每当我退回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.