jQuery jsonp ajax 请求的查询字符串中的下划线是啥?

Posted

技术标签:

【中文标题】jQuery jsonp ajax 请求的查询字符串中的下划线是啥?【英文标题】:What is the underscore for in the query string of a jQuery jsonp ajax request?jQuery jsonp ajax 请求的查询字符串中的下划线是什么? 【发布时间】:2012-09-24 10:50:06 【问题描述】:

当我查看来自 jsonp 请求(下面的客户端代码)的查询字符串时,有 2 个对象,一个您需要在响应中使用的“回调”字符串(因此客户端代码指向成功处理程序)和一个键为_...这个下划线是干什么用的?我在任何文档中都找不到对此的任何引用,它似乎是某种类型的。

我虽然它可能被用来指向错误处理程序(无论是在其开启时,与回调结合,或者在回调字符串中替换下划线后的数字),但它似乎不是。

url = 'http://localhost:11767/Handlers/MyHandler.ashx';

...

$.ajax(
    url: url,
    dataType: "jsonp",
    error: function (jqXHR, textStatus, errorThrown) 
        //...
    ,
    success : function(d) 
        //...
    
);

    $.getJSON(url + "?callback=?", function(d) 
    ).success(function(d) 
        //...
    ).error(function(jqXHR, textStatus, errorThrown) 
        //...
    ).complete(function(d) 
        //...
    );

旁注,以防这有助于任何人阅读:由于这是一个 jsonp 请求,只有在客户端发生异常时才会触发错误,例如响应的格式存在超时或问题(即不使用回调),为了克服这个问题,我总是记录并吞下处理程序中的异常,但给出一个标准的响应对象(所有响应都由它组成)具有异常状态属性和消息属性。

【问题讨论】:

我至少可以告诉你,它肯定不适合错误处理程序,因为 JSONP 请求插入了一个脚本标记并且没有错误处理程序,所以上面代码中的错误函数永远不会触发。很可能下划线根本与 XMLHttpRequest 无关? @adeneo - 我得出了同样的结论(尽管在错误处理程序底部阅读我的注释)。下划线可能无关紧要,我只是想知道它是什么,它来自哪里以及它是否有任何用处? 【参考方案1】:

您所指的数字是请求的日期时间戳。获取号码并使用浏览器的 javascript 控制台并输入:alert(new Date(/*insert number here*/))

您将收到带有日期/时间的警报。

编辑:

这是来自jQuery.ajax 文档的关于 ajax 请求的 sn-p:

缓存 默认值:true,对于 dataType 'script' 和 'jsonp' 为 false 如果设置为 false,它将强制浏览器不缓存请求的页面。 将缓存设置为 false 还会附加一个查询字符串参数 "_=[TIMESTAMP]", 到网址。

【讨论】:

以上是关于jQuery jsonp ajax 请求的查询字符串中的下划线是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 中止 JSONP ajax 请求

带有 jsonp 内容类型的 jQuery.ajax 请求后的解析器错误

使用 jsonp 错误的 jQuery ajax 请求

Ajax解决跨域--jQuery发送jsonp请求

为啥 jQuery ajax jsonp 请求会出错?

关于jQuery.ajax()的jsonp碰上post详解