得到“未定义”使用 MooTools 请求 Twitter 搜索 API 时。知道为什么吗?
我有以下代码:
window.addEvent('domready', function() {
console.log('starting twitter stuff');
var twitter = $('twitter');
var jsonReq = new Request.JSON({
method: 'get',
secure: false,
url: 'http://search.twitter.com/search.json?q=%23rhschelsea&rpp=1&include_entities=false&result_type=recent',
onRequest: function() {
twitter.set('text', 'Loading...');
},
onComplete: function(response) {
twitter.set('text', 'Loaded tweets');
console.log(response);
console.log('foobar');
}
}).send();
});
我在控制台中看到“foobar”。我在页面上看到“正在加载...”,然后看到“已加载推文”。但我在记录响应变量时看到“未定义”。
有什么想法吗?该 URL 有效,如果我将其放入浏览器中,我可以看到 JSON。
I have the following code:
window.addEvent('domready', function() {
console.log('starting twitter stuff');
var twitter = $('twitter');
var jsonReq = new Request.JSON({
method: 'get',
secure: false,
url: 'http://search.twitter.com/search.json?q=%23rhschelsea&rpp=1&include_entities=false&result_type=recent',
onRequest: function() {
twitter.set('text', 'Loading...');
},
onComplete: function(response) {
twitter.set('text', 'Loaded tweets');
console.log(response);
console.log('foobar');
}
}).send();
});
I'm seeing "foobar" in the console. I'm seeing "Loading..." and then "Loaded tweets" on the page. But I'm seeing "undefined" where I'm logging the response
variable.
Any thoughts why? The URL works and if I put it into the browser I can see JSON.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于 XSS/同源策略,您无法在远程域上使用
Request.JSON
- 它基于简单的 XHR 请求。使用Request.JSONP
代替,它是基于脚本的,因此不受域限制,这里有一个工作小提琴:http://jsfiddle.net/dimitar/B5rF4/
JSONP 它可以在 mootools-more 中找到。
twitter 会通过将
callback=foo
添加到您提供的 url 中,将其包装到请求的回调foo({...})
中,从而使其符合 JSONP。you cannot use
Request.JSON
on a remote domain due to XSS / same origin policy - it is based on Request which is simple XHR. useRequest.JSONP
instead, which is script-based, hence not subject to domain limitations, here's a working fiddle:http://jsfiddle.net/dimitar/B5rF4/
JSONP it's available in mootools-more.
twitter reacts to adding
callback=foo
to the url you supplied by wrapping it into the requested callbackfoo({...})
, which makes it JSONP-compliant.