0

这让我发疯了,我浏览了我在谷歌和这里看到的每一篇文章,两天后,101 个变种之后我仍然没有进一步前进。

成功 201 完美运行,我收到绑定项目的警报。404 根本不起作用,无论我尝试什么,ErrorDesc 始终未定义。我已经让它可以使用固定字符串命中这个 404 函数,但我希望用户知道为什么会出现错误。

我用 fiddler 来查看请求和响应。看起来不错,请求和响应都是格式良好的 JSON:

原始请求:

{"Bedrooms":"3","BuildingsAD":"Yes","BuildingsMD":"No","BulidingSI":"100000","ContentsAD":"No","ContentsMD":"No","ContentsPOL":"No","ContentsSI":"5000","EffectiveDate":"03/10/2012 23:40:10","EL":"N","MD":"No","NCD":"1","POL":"No","PropType":"Terraced","RiskPostcode":"SW19 1TS","SchemeRef":"20","TA":"No","TenantTheft":"No","TenantType":"Professional","Theft":"No","TransactionDate":"03/10/2012 23:40:10","VolExcess":"250","YearBuilt":"2000 +","ErrorDesc":"123"}

Raw Response:

{"RatingId":"f5733e9d-bc9d-4026-8d5f-ce4f750a3a42","SchemeRef":"20","EffectiveDate":"03/10/2012 23:40:10","TransactionDate":"03/10/2012 23:40:10","Bedrooms":"3","BuildingsAD":"Yes","BuildingsMD":"No","BulidingSI":"100000","ContentsAD":"No","ContentsMD":"No","ContentsPOL":"No","ContentsSI":"5000","EL":"N","MD":"No","NCD":"1","POL":"No","PropType":"Terraced","RiskPostcode":"SW19 1TS","TA":"No","TenantTheft":"No","TenantType":"Professional","Theft":"No","VolExcess":"250","YearBuilt":"2000 +","Error":true,"ErrorDesc":"Rating Sheet not found"}


    <script type="text/javascript">

        function CalcRating() {
            //create a Json object based on data entered by user
            var RatingItems = {
                AD: $("#AD").val(),
                AdminFee: $("#AdminFee").val(),
                Bedrooms: $("#Bedrooms").val(),
                BuildingsAD: $("#BuildingsAD").val(),
                BuildingsMD: $("#BuildingsMD").val(),
                BuildingsPremium: $("#BuildingsPremium").val(),
                BulidingSI: $("#BulidingSI").val(),
                ContentsAD: $("#ContentsAD").val(),
                ContentsMD: $("#ContentsMD").val(),
                ContentsPOL: $("#ContentsPOL").val(),
                ContentsPremium: $("#ContentsPremium").val(),
                ContentsSI: $("#ContentsSI").val(),
                EffectiveDate: $("#EffectiveDate").val(),
                EL: $("#EL").val(),
                IPT: $("#IPT").val(),
                MD: $("#MD").val(),
                NCD: $("#NCD").val(),
                POL: $("#POL").val(),
                PropType: $("#PropType").val(),
                RatingId: $("#RatingId").val(),
                RiskPostcode: $("#RiskPostcode").val(),
                SchemeRef: $("#SchemeRef").val(),
                TA: $("#TA").val(),
                TenantTheft: $("#TenantTheft").val(),
                TenantType: $("#TenantType").val(),
                Theft: $("#Theft").val(),
                TransactionDate: $("#TransactionDate").val(),
                TotalPremium: $("#TotalPremium").val(),
                VolExcess: $("#VolExcess").val(),
                YearBuilt: $("#YearBuilt").val(),
                ErrorDesc: "123"
            };
            //call jQuery Ajax method which calls Json.stringify method to convert
            //the Json object into string and send it with post method
            $.ajax({
                url: "/api/qsletpropertyom",
                data: JSON.stringify(RatingItems),
                type: "POST",
                contentType: "application/json;charset=utf-8",
                statusCode: {
                    201: function (result) {
                        alert("Total Premium: " + result.TotalPremium + ", Total Buildings Premium " + result.BuildingsPremium + ", Total Contents Cover " + result.ContentsPremium + ", Admin Fee " + result.AdminFee);
                    },
                    404: function (result1) {

                        alert(result.ErrorDesc);

                    },
                    500: function (result2) {
                        alert("Unknown Error");
                    }

                }
            });
        }

请让我知道我的方式的错误!

4

2 回答 2

1

首先,您result.ErrorDesc可能在预期的时候使用result1.ErrorDesc- 但我猜这只是一个错字。

其次,如果我猜对了,您想在 ajax 命中 404(找不到页面)时向用户显示错误描述?如果是这样,很可能您将无法这样做,因为没有数据传递给您的 404 处理程序。

也许您正在寻找其他类似errorajax 的选项 (http://api.jquery.com/jQuery.ajax/)。

来自 jQuery 文档:error“如果请求失败,则调用一个函数。该函数接收三个参数:jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象,一个描述发生的错误类型的字符串和一个可选的异常对象,如果发生了一次。第二个参数(除了 null)的可能值是“timeout”、“error”、“abort”和“parsererror”。当发生 HTTP 错误时,errorThrown 接收 HTTP 状态的文本部分,例如“ “未找到”或“内部服务器错误。”从 jQuery 1.5 开始,错误设置可以接受一组函数。将依次调用每个函数。注意:跨域脚本和 JSONP 请求不调用此处理程序。

$.ajax({
    url: "/api/qsletpropertyom",
    data: JSON.stringify(RatingItems),
    type: "POST",
    contentType: "application/json;charset=utf-8",
    error: function(jqXHR, textStatus, errorThrown) {
        // textStatus will contain "Not Found" for 404 errors
    }
});

编辑:显然,地图定义中使用的 404 处理程序statusCode(如您所做的那样)获得 3 个参数,就像error选项一样。这是工作示例:http: //jsfiddle.net/QsHdV/2/

请注意,您得到的第一个参数是 jquery XHR 对象而不是一些结果数据。

于 2012-10-04T11:57:54.663 回答
1

我认为问题在于您期望将响应文本作为 404 案例中的第一个参数,这不是 jQuery 返回的。

这里有一些来自jQuery 文档的信息:

statusCode(新增1.5)地图

如果请求成功,状态码函数采用与成功回调相同的参数;如果导致错误,它们将采用与错误回调相同的参数

error(jqXHR, textStatus, errorThrown) 函数

请求失败时调用的函数。该函数接收三个参数:jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象,一个描述发生的错误类型的字符串和一个可选的异常对象(如果发生)。第二个参数(除了 null)的可能值是“timeout”、“error”、“abort”和“parsererror”。发生 HTTP 错误时,errorThrown 会接收 HTTP 状态的文本部分,例如“未找到”或“内部服务器错误”。从 jQuery 1.5 开始,错误设置可以接受一个函数数组。每个函数都会被依次调用。注意:跨域脚本和 JSONP 请求不调用此处理程序。这是一个 Ajax 事件。

成功(数据,文本状态,jqXHR)函数,数组

请求成功时调用的函数。该函数获得三个参数: 从服务器返回的数据,根据 dataType 参数格式化;描述状态的字符串;和 jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象。从 jQuery 1.5 开始,success 设置可以接受一个函数数组。每个函数都会被依次调用。这是一个 Ajax 事件。

如您所见,当发生 HTTP 错误时,您没有得到响应数据对象作为参数。

于 2012-10-04T12:04:27.213 回答