Javascript Json响应未定义

Javascript Json响应未定义,javascript,json,jquery,Javascript,Json,Jquery,这让我发疯,我已经看完了我在谷歌上看到的每一篇文章,在这里,两天后,101个变体,我仍然没有进一步的进展 success 201工作正常,我收到绑定物品的警报。404根本不工作,无论我尝试什么,ErrorDesc总是未定义。我已经让它工作,它可以击中这个404函数与一个固定的字符串,但我想让用户知道为什么有一个错误 我使用fiddler查看请求和响应。看起来不错,请求和响应都是格式良好的JSON: 原始请求: {"Bedrooms":"3","BuildingsAD":"Yes","Buildi

这让我发疯,我已经看完了我在谷歌上看到的每一篇文章,在这里,两天后,101个变体,我仍然没有进一步的进展

success 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");
                    }

                }
            });
        }
{“卧室”:“3”、“BuildingsAD”:“是”,“Buildingsi”:“否”,“Buildingsi”:“100000”,“ContentsAD”:“否”,“ContentsMD”:“否”,“ContentsPOL”:“否”,“ContentsSI”:“5000”,“生效日期”:“2012年10月3日23:40:10”,“EL”:“N”,“MD”:“否”,“NCD”:“1”,“POL“专业”、“盗窃”:“否”、“交易日期”:“2012年10月3日23:40:10”、“超额量”:“250”、“年份建成”:“2000+”、“错误描述”:“123”}
原始响应:
{“RatingId”:“f5733e9d-bc9d-4026-8d5f-ce4f750a3a42”,“SchemeRef”:“20”,“生效日期”:“03/10/2012 23:40:10”,“交易日期”:“03/10/2012 23:40:10”,“卧室”:“3”,“BuildingsAD”:“是”,“Buildingsi”:“100000”,“ContentsSad”:“否”,“ContentsMD”:“否”,“ContentsPOL”:“否”,“ContentsPI”:“5000”,“EL”:“N”,“MD”:“否”,“NCD”:“否”,“NCD”:“1”,“POL梯田、RiskPostcode:“SW19 1TS”、“TA:“No”、“TenantTheft:“No”、“TenantType:“Professional”、“Theft:“No”、“VolOversex:“250”、“YearBuild:“2000+”、“Error:“true”,“ErrorDesc:“未找到评级表”}
函数CalcRating(){
//根据用户输入的数据创建Json对象
var比率项目={
广告:$(“#广告”).val(),
AdminFee:$(“#AdminFee”).val(),
卧室:$(“#卧室”).val(),
BuildingsAD:$(“#BuildingsAD”).val(),
BuildingsMD:$(“#BuildingsMD”).val(),
BuildingsPremium:$(“#BuildingsPremium”).val(),
Bullidingsi:$(“#Bullidingsi”).val(),
ContentsAD:$(“#ContentsAD”).val(),
ContentsMD:$(“#ContentsMD”).val(),
ContentsPOL:$(“#ContentsPOL”).val(),
ContentsPremium:$(“#ContentsPremium”).val(),
ContentsSI:$(“#ContentsSI”).val(),
生效日期:$(“#生效日期”).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(),
租户权重:$(“#租户权重”).val(),
租户类型:$(“#租户类型”).val(),
盗窃:$(“#盗窃”).val(),
TransactionDate:$(“#TransactionDate”).val(),
TotalPremium:$(“#TotalPremium”).val(),
vol过剩:$(“#vol过剩”).val(),
YearBuild:$(“#YearBuild”).val(),
错误描述:“123”
};
//调用jQuery Ajax方法,该方法调用Json.stringify方法进行转换
//将Json对象转换为字符串,并使用post方法发送它
$.ajax({
url:“/api/qsletpropertyom”,
数据:JSON.stringify(RatingItems),
类型:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
状态代码:{
201:功能(结果){
警报(“总保险费:“+result.TotalPremium+”,总建筑保险费“+result.BuildingsPremium+”,总内容包括“+result.ContentsPremium+”,管理费“+result.AdminFee”);
},
404:函数(结果1){
警报(result.ErrorDesc);
},
500:函数(结果2){
警报(“未知错误”);
}
}
});
}

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

首先,您使用的是
result.ErrorDesc
,而您可能正期待
result1.ErrorDesc
——但我想这只是一个输入错误

其次,如果我没记错的话,您希望在ajax点击404时向用户显示错误描述(找不到页面)?如果是这样的话,您很可能无法这样做,因为没有数据传递给404处理程序

也许您正在寻找类似ajax的
error
选项之类的东西(http://api.jquery.com/jQuery.ajax/)

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

编辑: 显然,
statusCode
映射定义中使用的404处理程序(正如您所做的)得到了3个参数,就像
error
选项一样。下面是一个工作示例:


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

我认为问题在于,在404情况下,您希望得到响应文本作为第一个参数,这不是jquery返回的结果

$.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
    }
});