jquerydatafilter以某种方式导致将空数据发送到ajax成功回调
我为返回JSON数据的jQuery调用定义了一个ajax数据过滤器,以确保.Net编码的日期在返回时自动转换为JavaScript日期:jquerydatafilter以某种方式导致将空数据发送到ajax成功回调,jquery,ajax,Jquery,Ajax,我为返回JSON数据的jQuery调用定义了一个ajax数据过滤器,以确保.Net编码的日期在返回时自动转换为JavaScript日期: $.ajaxSetup({ dataFilter: function(data, type) { var rx = /"\\\/Date\(([0-9]+)\)\\\/"/g; if(type == 'json' && typeof(data) == 'string' && rx.test
$.ajaxSetup({
dataFilter: function(data, type) {
var rx = /"\\\/Date\(([0-9]+)\)\\\/"/g;
if(type == 'json' && typeof(data) == 'string' && rx.test(data)) {
var obj = JSON && JSON.parse ? JSON.parse(data) : eval(data);
replaceMicrosoftJSONDates(obj);
return obj;
}
return data;
}
});
replaceMocrosoftJSondates
函数工作正常;它递归地遍历对象,并用实际的JavaScript日期替换与适当的日期格式字符串匹配的字符串,但这里它用于测试目的:
function replaceMicrosoftJSONDates(obj) {
for(var p in obj)
switch(typeof(obj[p])) {
case 'string':
var match = /^\/Date\(([0-9]+)\)\/$/.exec(obj[p]);
if(match) obj[p] = new Date(parseInt(match[1]));
break;
case 'object':
replaceMicrosoftJSONDates(obj[p]);
break;
}
}
问题在于dataFilter函数。如果我返回修改后的JSON对象,null
作为数据
参数发送到ajaxsuccess
回调:
$.ajax({
type: 'GET',
cache: false,
url: __appPath + 'path/to/my/page',
success: function(data) {
console.log(data); // displays null
}
});
据我所知,这个过程中涉及的jQuery私有函数是ajaxConvert
,您可以在
请记住以下几点:
- 这不是跨域脚本调用
- 服务器返回一个HTTP200(OK)响应,responseText包含完整的数据
- 数据正正确发送到dataFilter函数
- dataFilter函数似乎可以正确地解析和修改响应,并返回一个有效的JavaScript对象,该对象已经解析并准备使用
dataFilter
函数返回一个字符串,jQuery将正确执行其工作并向我发送一个解析的JSON对象。如果我返回一个预解析的JavaScript对象,jQuery会将null
发送到我的success
回调。在本例中,我使用的是jQuery 1.5.2,这个过滤器用于其他应用程序和jQuery的旧版本。现在突然间,它似乎不再起作用了
解决方案
这里:Rick Strahl最近遇到了类似的问题(这似乎是针对jQuery 1.5.2的)。由于我不想抄袭他的作品,以下是他的解决方案,可以很容易地指导您解决问题:根据我的经验,我只想简单评论一下: 无论在何处放置用于远程验证的dataFilter方法,只要确保它返回stringyfied布尔值,如下所示:
return $.toJSON(true)
or
return $.toJSON(false)
我花了几个小时才发现:)看不出他的解决方案与我的问题有什么关系-你链接的代码似乎与日期转换算法有关,这不是这里的问题。他的解决方案简单地展示了如何使用“转换器”设置,与我们在jQuery 1.5.2之前使用dataFilter的目的相同(它甚至还可以进行.Net日期清理-以一种稍微不同的方式进行,但您可以很容易地知道将代码放在哪里)下面是论坛帖子,他在其中解释了解决方案:是的,我真愚蠢,没有首先通过那个链接Rick Strahl关于使用数据转换器而不是数据过滤器的帖子上的评论对我有效。这对我有效,尽管我使用了JSON的
JSON.JSON.js
实现中的json2.js
G