这是jQuery 1.9.1中的错误吗?

时间:2015-08-27 18:10:33

标签: javascript jquery

在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行设置断点并检查各种变量设置为什么时,我会看到以下内容:

Scope

你可以看到' o'是一个东西,o.handlers [a ++]也可以这样做:

enter image description here

但无论出于何种原因,在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。

我只能说:

  1. 问题已经消失
  2. 我不是JS精灵
  3. 我不知道为什么在ajax请求中添加静态标头会破坏jQuery

0 个答案:

没有答案