$ .ajax выдает странную ошибку «Uncaught TypeError: Незаконный вызов» - PullRequest
14 голосов
/ 25 ноября 2010

У меня есть некоторый код jQuery, который выдает действительно странную ошибку. Google Chrome вызывает ошибку Uncaught TypeError: Illegal invocation и сообщает, что она добавлена ​​в c.extend.param.e строки 144 jquery-1.4.4.min.js, но возвращает ее к моему вызову $ .ajax, который выглядит следующим образом:

$.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 ]

19 голосов
/ 25 ноября 2010

Проблемы здесь:

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

2 голосов
/ 25 ноября 2010

попробуйте с jQuery.param с традиционным параметром в true

документация по параметру
изменен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...