簡體   English   中英

為什么我的后端函數循環,從而使我的GET ajax調用失敗?

[英]Why does my back-end function loops, thus making my GET ajax call fail?

這已在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:網絡錯誤0x2f78,由於錯誤00002f78而無法完成操作。

否則,永遠不會觸發后端函數並在成功時返回null(盡管這可能是因為異步調用尚未完成),並且控制台沒有捕獲到任何有趣的東西。

我試圖在工作的Ajax調用之前設置麻煩的ajax調用,但是問題仍然存在。 我做錯了什么,該怎么辦才能解決?

順便說一句,我在Google搜索中發現了這一點 ,並說無法在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");
    }
  });
  }

在嘗試了不同的方法(感謝@Sandcar)之后,我決定以不同的方式進行攻擊。 在第二個AJAX通話開始之前讓第一個AJAX通話結束。 這使得后端函數的行為符合預期(不進行循環),但是AJAX調用返回了錯誤(我在問題中發帖的錯誤)。

然后讓我感到震驚的是,這可能是在Holiday類中的事情(我之前遇到過一個問題,我發現需要聲明設置器,即使它是空的也可以使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不喜歡DateTime嗎? 類型。 這可以通過將Date解析為字符串來解決(如果有人認為有解決此問題的正確方法,請隨時答復並糾正我)。 最后刪除了[DataMember] ,因為該屬性對我來說是不必要的(添加setter不能解決問題,順便說一句)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM