在jQuery 1.9.1源代码中,第974行(我下载的版本)读取:
while ((i = o.handlers[a++]) && !e.isImmediatePropagationStopped())(!e.namespace_re || e.namespace_re.test(i.namespace)) && (e.handleObj = i, e.data = i.data, r = ((b.event.special[i.origType] || {}).handle || i.handler).apply(o.elem, u), r !== t && (e.result = r) === !1 && (e.preventDefault(), e.stopPropagation()))
这是一条线的怪异......
我收到如下错误:
Uncaught TypeError: ((b.event.special[i.origType] || (intermediate value)).handle || i.handler).apply is not a functionb.event.dispatch @ jquery-1.9.1.js:974
b.event.add.v.handle @ jquery-1.9.1.js:914
b.event.trigger @ jquery-1.9.1.js:953
b.extend.ajax @ jquery-1.9.1.js:2796
(anonymous function) @ tech_payments.js:39
b.event.dispatch @ jquery-1.9.1.js:974
b.event.add.v.handle @ jquery-1.9.1.js:914
当我在该文件中的第974行设置断点并检查各种变量设置为什么时,我会看到以下内容:
你可以看到' o'是一个东西,o.handlers [a ++]也可以这样做:
但无论出于何种原因,在while循环内的括号内,我都没有被分配到o.handlers [0]或其他任何东西。
这是jQuery 1.9.1中的错误,评估顺序还是什么?我完全迷失了这个。
更新:
我偶然发现导致问题的原因:
// /*
// * Registers a callback which copies the csrf token into the
// * X-CSRF-Token header with each ajax request. Necessary to
// * work with rails applications which have fixed
// * CVE-2011-0447
// */
//
$(document).ajaxSend({
onCreate: function(request) {
var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
if (csrf_meta_tag) {
var header = 'X-CSRF-Token',
token = csrf_meta_tag.readAttribute('content');
if (!request.options.requestHeaders) {
request.options.requestHeaders = {};
}
request.options.requestHeaders[header] = token;
}
}
});
jQuery Mobile在ajaxSend上丢失会话时遇到了问题,我在这个网站上遇到的解决方案提出了上述建议。有各种各样的修复,上面有一些变化,我尝试了其中一些,直到我得到了一个有效并且不会破坏我的其他Ajax。
我只能说: