关于jquery JSONP 的一个问题.

JSONP是利用script标签来达到跨域传递消息的效果。
在其发出的URL中一般都会有一个参数callback。如图所示

然后我看了一下,在后台会利用这个参数来包裹返回的数据。
那么我有一个问题:
如果后台代码用的不是callback而是callbackFn 这样的字段
来表示对应的回调函数名称呢?这样的话,是不是jquery的
JSONP就失效了呢?
————–update————–
我想表达的是:
如果我在后台不用callback获取函数名称变量,而是用别的来获取函数名称。
那么jquery 的jsonp是不是就失效了。
jquery为了应对这种情况又做了什么准备?
希望大家多多指教。

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算是行业的潜规则了!

发表评论

电子邮件地址不会被公开。 必填项已用*标注