Почему ошибка IE8 в $ .post () [«Объект не поддерживает это свойство или метод»]? - PullRequest
3 голосов
/ 08 февраля 2011

Я искал все выше и ниже, но не могу найти это, даже если упомянуто. Используя jQuery 1.4.4 (и никакой другой библиотеки), пока это происходит только в Internet Explorer 8 . Ошибка «Объект не поддерживает это свойство или метод», и строка, на которую он указывает, находится ниже, в $.post(.

JS

HTML-код не является исключительным, поэтому я просто собираюсь опубликовать JS.

$(window).load(function(){

$("input[type='submit']", ".scope").live("click", function(e){
    e.preventDefault();
    // some intervening code defining variables used below...

    //only var which is at all complex
    var inputs = $form.find(":input").serializeArray();

    $.post(
        action,
        inputs,
        function(data){
            var $json = $.parseJSON(data);
            if ( $json.success == true ) {
                if ( testVar == 2 ) {
                    if ( $json.tabkill == true ) {
                        killTab(tabID);
                    } else {
                        loadPane(rID,tabID,"refreshTop");
                    }
                } else {
                    loadPane(rID,tabID);
                }
            } else {
                //modal dialogue error message, excised
            }
        }
    ).ajaxError(function(e, xhr, settings, exception) {
        if (settings.url == action) {
            alert("Problem calling: "+settings.url+"\n code: "+xhr.status+"\n exception: "+exception);
        }
    });

    return false;
});

//end window load block
});

Ответы [ 3 ]

5 голосов
/ 08 февраля 2011

Проблема с вашей линией ajaxError.

Проблема в том, что $.post возвращает объект XMLHTTPRequest, а не выбор jQuery. ajaxError должен вызываться при выборе jQuery.

Есть два безопасных способа обойти это:

1) Обновление до jQuery 1.5. Это вводит новый XMLHTTPRequest объект оболочки jqXHR. Вы можете использовать обработчик error так, как вы пытаетесь:

$.post(
    action,
    inputs,
    function(data){
        /* ... */
    }
).error(function(){
    alert ("Problem calling: " + action + "\nCode: " + this.status + "\nException: " + this.statusText);
});

2) Используйте прямой вызов $.ajax и установите обработчик error:

$.ajax({
    url: action,
    data: inputs,
    success: function(data){
        /* ... */
    },
    error: function(xhr, textStatus, error) {
        alert("Problem calling: " + action + "\nCode: " + xhr.status + "\nException: " + textStatus);
    }
});
5 голосов
/ 08 февраля 2011

Это потому, что метод ajaxError() (документы) необходимо вызывать для объекта jQuery, а $.post() (документы) метод возвращает объект XMLHttpRequest.

Не уверен, почему вы не получаете сообщение об ошибке в других браузерах.

2 голосов
/ 08 февраля 2011

Я думаю, что это неверно:

).ajaxError(function(e, xhr, settings, exception) {
        if (settings.url == action) {
            alert("Problem calling: "+settings.url+"\n code: "+xhr.status+"\n exception: "+exception);
        }
    });

он должен быть присоединен к объекту jQuery.

РЕДАКТИРОВАТЬ : что сказал Патрик.

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