$ .ajax投掷奇怪的“未捕获的TypeError:非法调用”

时间:2010-11-25 17:17:28

标签: javascript ajax jquery

我有一些jQuery代码,这是一个非常奇怪的错误。谷歌浏览器调用错误Uncaught TypeError: Illegal invocation并说它在jquery-1.4.4.min.js第144行的c.extend.param.e中抛出,但将其回溯到我的$ .ajax调用,如下所示:< / p>

$.ajax({
   url: target,
   type: method,
   dataType: 'json',
   data: sendData,
   success: function(result) {
       if (result.redirect) {
           window.location = result.redirect;
       }
       else {
           for (var i in result) {
                if ($(i).size()) {
                    $(i).html(result.i);
                }
            }
        }
    }
});

关于SO的另一个看起来有点像这样的问题将它归因于使用$而没有将它正确地包含在jQuery函数中,但是我很确定这次不是我的错误,因为我一直很小心

2 个答案:

答案 0 :(得分:19)

问题在于:

event.preventDefault();
var data = $.extend({
    referrer: window.location, <-- window.location is an object,
                                   should be window.location.href
    href: $(this).attr('href')
}, options.linkData);
loadPage(options.linkUrl, options.linkMethod, data);

更改此功能会使其正常工作,理由是它会中断吗?

<jQUery1.4.4 at line 6079>
s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value)

encodeURIComponent不喜欢window.location对象,因为它只需要strings

请参阅:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent

答案 1 :(得分:2)

尝试使用传统参数的jQuery.param

documentation of param
modified