这是在 Internet Explorer 10 上测试的,但设置方式与 IE8 类似
我有两个 ajax 调用。第一个是异步的,第二个是同步的。在第一个中,我获取一个月中各天的数据。 成功后,它会触发同步 ajax 调用以获得假期。
$(function () {
/*some code*/
Load();
}
function Load() {
/* Some irrelevant code */
var today = new Date();
var selectedDate = (today.getMonth() + 1) + "/" + today.getFullYear();
//PopUp that appears when the Ajax calls are made.
var $waitDialog = $('<div id="waitingPopUp"></div>'); //I shortened the content of this variable.
$waitDialog.dialog({
zIndex: 3000,
title: 'Processing...',
dialogClass: "no-close",
resizable: false,
draggable: false,
modal: true,
closeOnEscape: false
});
ajaxGetMonthRecord(selectedDate);
}
function ajaxGetMonthRecord(selectedDate) {
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: url + "/GetMonthData",
data: { 'monthRecord': selectedDate },
dataType: "json",
success: function (data) {
var holidays = ajaxGetHolidays(selectedDate);
createCalendar(data, selectedDate, holidays);
}
},
error: function (jqXhr, textStatus, errorThrown) {
alert("ERROR ON AJAX CALL N°1");
}
});
}
[后端功能](这非常有效):
[OperationContract, WebGet(ResponseFormat = WebMessageFormat.Json)]
public List<MonthData> GetMonthData(string monthRecord)
{
var date = monthRecord.Split('/');
var list = (new MonthData()).GetAll(Convert.ToInt32(date[0]), Convert.ToInt32(date[1])).ToList();
return list;
}
这是失败的时候:
function ajaxGetHolidays(selectedDate) {
var holidays;
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: url + "/GetHolidays",
data: { 'monthRecord': selectedDate },
dataType: "json",
async: false,
success: function (data) {
holidays = data;
},
error: function (jqXhr, textStatus, errorThrown) {
alert("ERROR ON AJAX CALL N°2");
}
});
return holidays;
}
[第二次 AJAX 调用的后端函数]:
[OperationContract, WebGet(ResponseFormat = WebMessageFormat.Json)]
//This function starts running in a loop and never returns the List to the Ajax Call N°2
public List<Holiday> GetHolidays(string monthRecord)
{
var date = monthRecord.Split('/');
var list = (new Holiday()).GetAll(Convert.ToInt32(date[0]), Convert.ToInt32(date[1])).ToList();
return list;
}
当第二个ajax调用设置为async: false
时,后端函数将触发并返回数据。但是,当它到达后端函数的末尾时,它会在连续循环中一次又一次地触发,直到 ajax 调用抛出错误。
这是返回AJAX调用的错误信息。
readyState: 0
textStatus: "error"
errorThrown:
ABORT_ERR 20
code 19
DATA_CLONE_ERR 25
DOMSTRING_SIZE_ERR 2
HIERARCHY_REQUEST_ERR 3
INDEX_SIZE_ERR 1
INUSE_ATTRIBUTE_ERR 10
INVALID_ACCESS_ERR 15
INVALID_CHARACTER_ERR 5
INVALID_MODIFICATION_ERR 13
INVALID_NODE_TYPE_ERR 24
INVALID_STATE_ERR 11
message "NetworkError"
name "NetworkError"
NAMESPACE_ERR 14
NETWORK_ERR 19
NO_DATA_ALLOWED_ERR 6
NO_MODIFICATION_ALLOWED_ERR 7
NOT_FOUND_ERR 8
NOT_SUPPORTED_ERR 9
PARSE_ERR 81
QUOTA_EXCEEDED_ERR 22
SECURITY_ERR 18
SERIALIZE_ERR 82
SYNTAX_ERR 12
TIMEOUT_ERR 23
TYPE_MISMATCH_ERR 17
URL_MISMATCH_ERR 21
VALIDATION_ERR 16
WRONG_DOCUMENT_ERR 4
但是当我设置async: true
时,它要么执行后端函数循环,并抛出responseText:""
和errorThrown:"错误"
,控制台也会抛出以下内容:
XMLHttpRequest: Network Error 0x2f78, Could not complete the operation due to error 00002f78.
或者后端函数永远不会被触发并在成功时返回 null(尽管这可能是因为异步调用尚未完成)并且控制台没有捕捉到任何有趣的东西。
我尝试将令人不安的 ajax 调用设置在有效的 ajax 调用之前,但问题仍然存在。 我做错了什么以及我能做些什么来解决这个问题?
顺便说一句,我找到了this在我的谷歌搜索中,说不能在 IE 中进行两个 Ajax 调用,因为一个调用会中止另一个调用(根据我的理解)。有谁知道这个问题吗?
提前致谢。
最佳答案
尝试使用不同的方法,使用回调。 像这样的东西:
$(function () {
/*some code*/
Load();
});
function Load() {
var today = new Date();
var selectedDate = (today.getMonth() + 1) + "/" + today.getFullYear();
//PopUp that appears when the Ajax calls are made.
var $waitDialog = $('<div id="waitingPopUp"></div>'); //I shortened the
$waitDialog.dialog({
zIndex: 3000,
title: 'Processing...',
dialogClass: "no-close",
resizable: false,
draggable: false,
modal: true,
closeOnEscape: false
});
ajaxGetMonthRecord(selectedDate, function (result) {
var holidays = ajaxGetHolidays(selectedDate);
createCalendar(result, selectedDate, holidays);
});
}
function ajaxGetMonthRecord(selectedDate, callback) {
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: url + "/GetMonthData",
data: { 'monthRecord': selectedDate },
dataType: "json",
success: function (data) {
if ($.isFunction(callback)) {
callback(data);
}
}
, error: function (jqXhr, textStatus, errorThrown) {
alert("ERROR ON AJAX CALL N°1");
}
});
}
关于javascript - 为什么我的后端函数会循环,从而导致我的 GET ajax 调用失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680982/