我搜索过高低,但是甚至没有提到它。使用 jQuery 1.4.4 (并且没有其他库),到目前为止这只发生在 Internet Explorer 8 上。错误是“对象不支持此属性或方法”,它指向的行位于$.post(
下方。
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
});
答案 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对象。
编辑:帕特里克说的话。