所以我正在阅读Malsup的twitter plugin上的代码,我注意到他已经编写了自己的方法来处理jsonp但是有超时和错误。我只能假设内置的jQuery方法'getJSON'没有这个功能,即使它显然工作正常。
那么,我应该继续在我正在制作JSONP请求的项目中使用Malsups版本,还是坚持使用jQuery的方法。我已经通过电子邮件向Malsup和保罗爱尔兰发送电子邮件询问为什么有必要写这个,但我没有收到回复。不能怪他们真的:)
$.getJSONP = function(s){
s.dataType = 'jsonp';
$.ajax(s);
// figure out what the callback fn is
var $script = $(document.getElementsByTagName('head')[0].firstChild);
var url = $script.attr('src') || '';
var cb = (url.match(/callback=(\w+)/) || [])[1];
if (!cb)
return; // bail
var t = 0, cbFn = window[cb];
$script[0].onerror = function(e){
$script.remove();
handleError(s, {}, "error", e);
clearTimeout(t);
};
if (!s.timeout)
return;
window[cb] = function(json){
clearTimeout(t);
cbFn(json);
cbFn = null;
};
t = setTimeout(function(){
$script.remove();
handleError(s, {}, "timeout");
if (cbFn)
window[cb] = function(){
};
}, s.timeout);
function handleError(s, o, msg, e){
// support jquery versions before and after 1.4.3
($.ajax.handleError || $.handleError)(s, o, msg, e);
}
};
答案 0 :(得分:1)
如果是JSONP,您可以使用
$.getJSON(url + "&callback=?", [args]);
获取JSONP并在加载时调用函数。 &callback=?
查询允许jQuery在全局范围内生成随机回调函数以响应JSONP调用。
答案 1 :(得分:0)
重要提示:从jQuery 1.4开始,如果是 JSON文件包含语法错误, 请求通常会无声地失败。 避免频繁手工编辑JSON 数据就是这个原因。 JSON是一个 数据交换格式与语法 比那些更严格的规则 JavaScript的对象文字符号。 例如,表示所有字符串 在JSON中,它们是否属性 或值,必须包含在内 双引号。有关JSON的详细信息 格式,请参阅http://json.org/。
据推测,沉默失败不是他们喜欢的东西,因此是插件。在您的情况下,如果您正在制作JSONP请求并发现自己使用onError
或onTimeout
方法,请保留插件。我不必在任何实际容量中使用JSONP,但我认为错误处理总是很好。在jQuery文档的链接中,在评论结束时对此进行了很好的讨论
答案 2 :(得分:0)
JQuery HowTo有一篇专门关于using jQuery, JSONP, and Twitter的帖子。
Twitter JSON(P)API网址:
http://twitter.com/status/user_timeline/USERNAME.json?count=10&callback=JSONPcallbackFunction
这是一个与jQuery一起使用的代码 $ .getJSON()函数:
http://twitter.com/status/user_timeline/USERNAME.json?count=10&callback=?
我们放了吗? (问号) 回调函数名称,所以jQuery可以 用动态的替换它 创造了。