这让我感到疯狂,我已经阅读了我在谷歌和这里看到的所有文章,两天后,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");
}
}
});
}
请让我知道我的方式错误!!
答案 0 :(得分:1)
首先,当你可能期待result.ErrorDesc
时,你正在使用result1.ErrorDesc
- 但这只是一个错误我猜。
其次,如果我说得对,你想在ajax命中404(找不到页面)时向用户显示错误描述?如果是这样,很可能你将无法做到这一点,因为没有数据传递给你的404处理程序。
也许您正在为ajax(http://api.jquery.com/jQuery.ajax/)寻找其他类似error
选项的内容。
来自jQuery文档:error
“如果请求失败则调用的函数。该函数接收三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,一个描述错误类型的字符串发生了一个可选的异常对象,如果发生了一个。第二个参数的可能值(除了null)是“timeout”,“error”,“abort”和“parsererror”。当发生HTTP错误时,errorThrown接收文本部分HTTP状态,例如“未找到”或“内部服务器错误。”从jQuery 1.5开始,错误设置可以接受一系列函数。每个函数将依次调用。注意:此处理程序不会被调用为交叉-domain脚本和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
}
});
编辑:
显然,statusCode
映射定义中使用的404处理程序(正如您所做的那样)得到3个参数,就像error
选项一样。以下是工作示例:http://jsfiddle.net/QsHdV/2/
注意,你得到的第一个参数是jquery XHR对象而不是一些结果数据。
答案 1 :(得分:1)
我认为问题是你希望将响应文本作为404案例中的第一个参数,这不是jQuery返回的内容。
这里有一些信息来自jQuery docs :
statusCode(已添加1.5)地图
如果请求成功,则状态码函数采用与成功回调相同的参数; 如果导致错误,则会采用与错误回调相同的参数。
错误(jqXHR,textStatus,errorThrown)功能
请求失败时要调用的函数。该函数接收三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,描述发生的错误类型的字符串和可选的异常对象(如果发生)。第二个参数的可能值(除了null)是“timeout”,“error”,“abort”和“parsererror”。发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如“Not Found”或“Internal Server Error”。从jQuery 1.5开始,错误设置可以接受一系列函数。每个函数将依次调用。注意:不会为跨域脚本和JSONP请求调用此处理程序。这是一个Ajax事件。
成功(data,textStatus,jqXHR)函数,数组
请求成功时要调用的函数。该函数传递三个参数:从服务器返回的数据,根据dataType参数格式化;描述状态的字符串;和jqXHR(在jQuery 1.4.x,XMLHttpRequest)对象。从jQuery 1.5开始,成功设置可以接受一系列函数。每个函数将依次调用。这是一个Ajax事件。
正如您所看到的,当发生HTTP错误时,您没有将响应数据对象作为参数。