可以在jQuery中处理和过滤JSON响应吗?
在执行完整或错误之前,是否可以在jQuery.ajax中处理来自服务器的JSON响应 或者让我把问题扩展一下: 在处理每个响应属性的JSON数据时,告诉$.ajax这是一个成功且完整的ajax请求,还是一个错误,因此$.ajax{error:function{};被处决了 Psuedocode示例: 你为什么会问?因为我想在任何地方都使用一个$.ajax语法,并且只使用$.ajax{process:functiondata{};应该随时更改。是的可以在jQuery中处理和过滤JSON响应吗?,jquery,ajax,error-handling,Jquery,Ajax,Error Handling,在执行完整或错误之前,是否可以在jQuery.ajax中处理来自服务器的JSON响应 或者让我把问题扩展一下: 在处理每个响应属性的JSON数据时,告诉$.ajax这是一个成功且完整的ajax请求,还是一个错误,因此$.ajax{error:function{};被处决了 Psuedocode示例: 你为什么会问?因为我想在任何地方都使用一个$.ajax语法,并且只使用$.ajax{process:functiondata{};应该随时更改。是的 function setDefaultPoint
function setDefaultPoint(){
var officeId = $('#clientTrip_officeId').val();
$.ajax({
url:"${createLink(controller:'clientTrip',action:'setDefaultPoint')}",
dataType: "json",
data: { officeId: officeId },
success: function(data) {
console.log(data.defaultPoint.id, data.defaultPoint.name);
console.log(data.company.id, data.company.name);
}
});
}
简单的答案是否定的,除非您想编写自己的JSON解析器 使用标准jQuery特性,ajaxsuccess和error处理程序将分别对成功/失败的数据检索进行响应,而不考虑数据的正确性,除非数据是格式良好的JSON 数据只提供给成功处理程序,因此如果要过滤它,必须在其中进行过滤 好消息是,您可以通过自己控制的$延迟来获得所需的操作,这将根据您选择的任何条件在两个处理程序中进行解析/拒绝。这通常是在返回延迟的承诺的函数中完成的 代码如下所示:
function getData() {
var dfrd = $.Deferred();
$.ajax({
url: 'script.php',
type: 'POST',
data: {some: 'data-1'},
dataType: 'json'
}).done(function(data, textStatus, jqXHR) {
if(data.success == true && (data.data.length > 0)) {
dfrd.resolve(data, textStatus, jqXHR);
} else {
dfrd.reject(jqXHR, "client-side error", "data.success==false and/or data.data.length==0");
}
}).fail(dfrd.reject);
return dfrd.promise();
}
因此,该函数执行您需要的附加检查,并且返回的承诺模拟jqXHR的完成/失败特性
为返回的promise提供jqXHR的全部功能需要更多的考虑,例如.abort方法。有用于ajax事件的全局事件处理程序:
$(document).ajaxComplete() //called when Ajax requests complete
$(document).ajaxError() //called when Ajax requests complete with an error
$(document).ajaxSend() //executed before an Ajax request is sent
$(document).ajaxStart() //called when the first Ajax request begins
$(document).ajaxStop() //called when all Ajax requests have completed
$(document).ajaxSuccess()
//function to be executed whenever an Ajax request completes successfully
以及ajax设置:
$(document).ajaxSetup({
url: 'script.php',
type: 'POST',
data: '{}',
dataType: 'json'
});
然后你可以打电话:
$.ajax({ data: myData });
它使用了以上所有功能
下面是一个使用asp.net的示例,其中它发回.d属性,并将其转换为所需的JSON:
$(document).ajaxSetup({
data: "{}",
dataType: "json",
type: "POST",
contentType: "application/json",
converters: {
"json jsond": function(msg) {
return msg.hasOwnProperty('d') ? msg.d : msg;
}
},
error: function(xhr, textStatus, errorThrown) {
var errorMessage = "Ajax error: " + this.url
+ " : " + textStatus + " : " + errorThrown
+ " : " + xhr.statusText + " : " + xhr.status;
alert(errorMessage);
if (xhr.status != "0" || errorThrown != "abort") {
alert(errorMessage);
}
}
});
注意:此转换器在成功或完成之前执行-因此我认为这就是您要问的问题。您到底想要什么?只需以结构化格式构建应用程序以处理服务器响应。对不起,这个问题没有多大意义。美元.ajax不是这样工作的吗?你能给出一些示例代码来说明你想要什么吗?我已经编辑了我的问题并添加了一个伪代码,请现在查看
$(document).ajaxSetup({
data: "{}",
dataType: "json",
type: "POST",
contentType: "application/json",
converters: {
"json jsond": function(msg) {
return msg.hasOwnProperty('d') ? msg.d : msg;
}
},
error: function(xhr, textStatus, errorThrown) {
var errorMessage = "Ajax error: " + this.url
+ " : " + textStatus + " : " + errorThrown
+ " : " + xhr.statusText + " : " + xhr.status;
alert(errorMessage);
if (xhr.status != "0" || errorThrown != "abort") {
alert(errorMessage);
}
}
});