为什么$ .post()上的IE8错误[“对象不支持此属性或方法”]?

时间:2011-02-08 18:42:50

标签: javascript internet-explorer jquery internet-explorer-8

我搜索过高低,但是甚至没有提到它。使用 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 个答案:

答案 0 :(得分:5)

这是因为需要针对jQuery对象调用ajaxError()(docs)方法,$.post()(docs)方法返回XMLHttpRequest对象。

不确定为什么在其他浏览器中没有出现错误。

答案 1 :(得分:5)

问题在于您的行ajaxError

问题是$.post返回XMLHTTPRequest个对象,而不是jQuery选择。必须在jQuery选择上调用ajaxError

有两种安全的方法:

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);
    }
});

答案 2 :(得分:2)

我认为这是无效的:

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

它应该附加到jQuery对象。

编辑:帕特里克说的话。