JQuery 中解析 JSON 的回调函数
我是 JQuery 新手,也许这是一个棘手的问题。而且我的英语也不是最好的。
我在 Google App Engine 应用程序中编写了一项服务,该服务以 JSON 格式提供数据,工作正常,但我无法使用 JQuery 解析该 JSON 数据:
var url= 'myapp.appspot.com/myservice.json?someparams';
$.getJSON(url, function(json){
alert("Success parsing JSON"); // I never reached this code
....
});
在阅读了几天的帖子和教程后,我对这个 SlideShare 有了感觉: http://www.slideshare.net /andymckay/cross-domain-webmashups-with-jquery-and-google-app-engine
在阅读幻灯片 23 时,我注意到“callback=?”参数,我尝试了幻灯片 42 中的代码:
class MyJSONHandler(webapp.RequestHandler):
def get(self):
## Retrieve some data from DB or MemCached
jsonData = json.dumps(data)
if self.request.get('callback'):
self.response.out.write('%s(%s)' % (self.request.get('callback'), jsonData))
else:
self.response.out.write(jsonData)
在 JQuery 函数中:
$.getJSON(url+'&callback=?', function(json){
alert("Success parsing JSON"); // Now i'm here !!
....
});
我的问题是:
为什么需要“回调”参数才能完成这项工作? '?("MyJSON": [{"a-lot" : "of-data"}])' 有什么区别?
谢谢大家。
I'm new to JQuery and maybe this is a n00b question. And also my English is not the best.
I wrote a service in my Google App Engine application who delivers data in JSON format, which works OK, but I wasn't able to parse that JSON data using JQuery:
var url= 'myapp.appspot.com/myservice.json?someparams';
$.getJSON(url, function(json){
alert("Success parsing JSON"); // I never reached this code
....
});
After a few days of reading posts and tutorials I felt into this SlideShare: http://www.slideshare.net/andymckay/cross-domain-webmashups-with-jquery-and-google-app-engine
While reading slide 23 I noticed about the "callback=?" parameter and I tried the code in slide 42:
class MyJSONHandler(webapp.RequestHandler):
def get(self):
## Retrieve some data from DB or MemCached
jsonData = json.dumps(data)
if self.request.get('callback'):
self.response.out.write('%s(%s)' % (self.request.get('callback'), jsonData))
else:
self.response.out.write(jsonData)
And in the JQuery function:
$.getJSON(url+'&callback=?', function(json){
alert("Success parsing JSON"); // Now i'm here !!
....
});
My question is:
Why is the "callback" parameter necessary to make this work? What difference does the '?("MyJSON": [{"a-lot" : "of-data"}])' makes??
Thanks you all.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
callback
参数用于实现 JSONP。jQuery 的
getJSON
方法创建一个标记,该标记指向您提供的 URL。
URL 预计会返回对
callback
参数中指定的函数的调用,并将数据作为参数传递。与普通的 AJAX 请求不同,JSONP 请求可以跨域发出。
The
callback
parameter is used to implement JSONP.jQuery's
getJSON
method creates a<script>
tag that point to the URL you give it.The URL is expected to return a call to the function specified in the
callback
parameter, passing the data as a parameter.Unlike normal AJAX requests, JSONP requests can be made across domains.
如果您使用 AJAX 从另一个域访问您的服务,浏览器将不允许这样做。使用此技术可以通过动态嵌入脚本标记来解决此问题,并将 src 属性设置为请求的 URL,并且脚本主体调用传入的函数名称,并向其传递您的数据。
这是该过程的一个很好的解释: http://en.wikipedia.org/wiki/JSON#JSONP
If you are accessing your service from another domain using AJAX, the browser won't allow that. Using this technique gets around it by dynamically embedding a script tag with the src attribute set to the requested URL, and the body of the script calls your function name passed in, passing it your data.
Here's a great explanation of the process: http://en.wikipedia.org/wiki/JSON#JSONP
它称为 JSONP。
您可以在这里查看:什么是 JSONP?
希望它有所帮助
It's called JSONP.
You can look here: What is JSONP all about?
Hope it helps
该技术称为 JSONP:带有填充的 JSON,并使用规避同源政策。
The technique is called JSONP: JSON with Padding and is used to circumvent the same-origin policy.