关于jquery JSONP 的一个问题.

JSONP是利用script标签来达到跨域传递消息的效果。
在其发出的URL中一般都会有一个参数callback。如图所示
clipboard.png
然后我看了一下,在后台会利用这个参数来包裹返回的数据。
那么我有一个问题:
如果后台代码用的不是callback而是callbackFn 这样的字段
来表示对应的回调函数名称呢?这样的话,是不是jquery的
JSONP就失效了呢?
--------------update--------------
我想表达的是:
如果我在后台不用callback获取函数名称变量,而是用别的来获取函数名称。
那么jquery 的jsonp是不是就失效了。
jquery为了应对这种情况又做了什么准备?
希望大家多多指教。

阅读 4.1k
5 个回答

update

抱歉,没get到原意;

这就无解了,这个callback名是双方协商好的,后端要是换成其他,那没办法,jquery并没有这方面的处理,看源码 jquery 2.0.3

var oldCallbacks = [],
    rjsonp = /(=)\?(?=&|$)|\?\?/;

// Default jsonp settings
jQuery.ajaxSetup({
    //默认jsonp取值为callback
    jsonp: "callback",
    jsonpCallback: function() {
        var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
        this[ callback ] = true;
        return callback;
    }
});

// Detect, normalize options and install callbacks for jsonp requests
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {

    var callbackName, overwritten, responseContainer,
        jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
            "url" :
            typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
        );

    // Handle iff the expected data type is "jsonp" or we have a parameter to set
    if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {

        // Get callback name, remembering preexisting value associated with it
        callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
            s.jsonpCallback() :
            s.jsonpCallback;

        // Insert callback into url or form data
        if ( jsonProp ) {
            s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
        } else if ( s.jsonp !== false ) {//最终url设置了 xxx = callbackName, 后端接口参数改成callbackFn,jquery也始料不及吧~
            s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
        }
//下面省略

old:

jQuery的话建议看一下文档~

jsonpCallback: callbackFn

jsonpCallback
类型: String, Function
为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成一个独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。从jQuery 1.5开始,你也可以使用一个函数作为该参数设置,在这种情况下,该函数的返回值就是jsonpCallback的结果。

就callback这玩意儿来说。
霸气点来说。
它就是

行业规范

嚯嚯嚯嚯嚯!

实践是检验真理的唯一标准

其实用什么名字都可以,callback是jQuery默认的,只要前后端商量好统一就行了。

这块的规范,让你们老大出就好了。老大不出。跟后端协商好就行。一般callback算是行业的潜规则了!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题