使用jQuery的getJSON()方法

时间:2010-07-30 15:24:36

标签: javascript jquery

所以我正在阅读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);
    }
};

3 个答案:

答案 0 :(得分:1)

如果是JSONP,您可以使用

$.getJSON(url + "&callback=?", [args]);

获取JSONP并在加载时调用函数。 &callback=?查询允许jQuery在全局范围内生成随机回调函数以响应JSONP调用。

答案 1 :(得分:0)

来自getJSON(...)

的jQuery文档
  

重要提示:从jQuery 1.4开始,如果是   JSON文件包含语法错误,   请求通常会无声地失败。   避免频繁手工编辑JSON   数据就是这个原因。 JSON是一个   数据交换格式与语法   比那些更严格的规则   JavaScript的对象文字符号。   例如,表示所有字符串   在JSON中,它们是否属性   或值,必须包含在内   双引号。有关JSON的详细信息   格式,请参阅http://json.org/

据推测,沉默失败不是他们喜欢的东西,因此是插件。在您的情况下,如果您正在制作JSONP请求并发现自己使用onErroronTimeout方法,请保留插件。我不必在任何实际容量中使用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可以   用动态的替换它   创造了。