Javascript 为什么后端函数会循环,从而导致GET-ajax调用失败?

Javascript 为什么后端函数会循环,从而导致GET-ajax调用失败?,javascript,c#,jquery,asp.net,ajax,Javascript,C#,Jquery,Asp.net,Ajax,这是在InternetExplorer10上测试的,但设置方式与IE8类似 我有两个ajax调用。第一个是异步的,第二个是同步的。在第一个例子中,我从一个月的几天中获取数据。 如果成功,它将触发同步ajax调用以获得假期 $(function () { /*some code*/ Load(); } function Load() { /* Some irrelevant code */ var today = new Date();

这是在InternetExplorer10上测试的,但设置方式与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");
            }
        });
    }
[第二次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;
    }
但是当我设置
async:true时,
会执行后端函数循环并抛出一个错误,其中
responseText:“
errorThrown:”
,控制台还会抛出以下内容:

XMLHttpRequest:网络错误0x2f78,由于错误00002f78,无法完成操作

或者后端函数从未被激发,并且在成功时返回null(尽管这可能是因为异步调用尚未完成),并且控制台没有捕获任何有趣的内容

我试图将麻烦的ajax调用设置在可行的调用之前,但问题仍然存在。 我做错了什么?我能做些什么来解决这个问题

顺便说一下,我在谷歌搜索中发现,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");
    }
  });
  }
$(函数(){
/*一些代码*/
加载();
});
函数加载(){
var today=新日期();
var selectedDate=(today.getMonth()+1)+“/”+today.getFullYear();
//进行Ajax调用时出现的弹出窗口。
var$waitDialog=$('');//我缩短了
$waitDialog.dialog({
zIndex:3000,
标题:“处理…”,
dialogClass:“禁止关闭”,
可调整大小:false,
可拖动:错误,
莫代尔:是的,
closeOnEscape:错误
});
ajaxGetMonthRecord(选择日期、函数(结果){
var假日=ajaxGetHolidays(选择日期);
创建日历(结果、选定日期、假日);
});
}
函数ajaxGetMonthRecord(selectedDate,回调){
$.ajax({
键入:“获取”,
contentType:“应用程序/json;字符集=utf-8”,
url:url+“/GetMonthData”,
数据:{'monthRecord':selectedDate},
数据类型:“json”,
成功:功能(数据){
if($.isFunction(回调)){
回调(数据);
}
}
,错误:函数(jqXhr,textStatus,errorshown){
警报(“AJAX调用错误1”);
}
});
}

在尝试了不同的方法(谢谢@Sandcar)后,我决定用不同的方式攻击它;让第一个AJAX调用在第二个AJAX调用开始之前完成。这使得后端函数的行为符合预期(没有循环),但是AJAX调用返回了一个错误(与我在问题中发布的相同)

然后我突然想到它可能是Holiday类内部的东西(我以前遇到过一个问题,我发现setter需要声明,即使是空的,以便AJAX调用能够工作)

事实证明,问题出在Holiday类(我试图从中获取数据的类)的一个属性上:

[DataMember]
public DateTime? Date
    {
        get
        {
            string date = string.Concat(this.Day, "/", this.Month, "/", this.Year);
            return Convert.ToDateTime(date);
        }
    }
  /*code for getters and setters for day, month, year and description about the holiday */
显然,AJAX不喜欢类型。这可以通过解析来解决(如果有人认为有合适的方法来解决这个问题,请随时回复并更正我)。
我最终删除了
[DataMember]
行,因为该属性对我来说是不必要的(顺便说一句,添加setter并没有解决问题)。

遗憾的是,它对我不起作用。现在,ajaxGetMonthRecord()函数从不返回其后端函数,总是返回“null”(并且不会在控制台中抛出错误);让第一个AJAX调用在第二个AJAX调用开始之前完成。这使得后端函数的行为符合预期(没有生成循环),但它返回了一个错误。然后我突然想到它可能是Holiday类内部的东西(我有一个问题,我发现setter需要声明,即使是空的,以便AJAX调用工作)。但事实并非如此。事实证明AJAX不喜欢@Mayer M。在大多数情况下,我总是将javascript中的日期时间作为字符串传递。在后端,我将字符串转换为datetime。过去我有一些问题需要解决。Só用这种方法我解决了这类问题是的,但问题出在Holiday中。cs我将日期作为字符串传递,然后将字符串拆分为两个整数(后端方法使用月份和年份的整数变量,而不是单个DateTime变量,以便从DB中获取数据)。但是,由于Holiday.cs的属性之一是
DateTime?
attr,因此无法返回列表,因为我正在将DateTime属性解析为字符串(除非我将Holiday.cs的DateTime类型更改为字符串,或者返回JSON字符串,等等),我决定忽略属性,因为它的工作量更少&我实际上并不需要它。为什么还要为一个月中的几天打一个ajax调用呢?难道你不能用javascript把它们拿出来吗?因为我不想要单独的几天,而是来自服务器的涉及这些天的数据。例如:第1天在X小时有一个标志和一个关于它的描述,在Y小时有一个标志和一个描述。我不知道我是否说得很清楚。为什么不在服务器上创建一个函数来合并这两个操作的结果呢?这会比两次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
$(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");
    }
  });
  }
[DataMember]
public DateTime? Date
    {
        get
        {
            string date = string.Concat(this.Day, "/", this.Month, "/", this.Year);
            return Convert.ToDateTime(date);
        }
    }
  /*code for getters and setters for day, month, year and description about the holiday */