- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为返回 JSON 数据的 jQuery 调用定义了一个 ajax dataFilter,以确保 .Net 编码的日期在返回时自动转换为 JavaScript 日期:
$.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;
}
});
replaceMicrosoftJSONDates 函数工作正常;它递归地迭代对象,并将与适当的日期格式字符串匹配的字符串替换为实际的 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
将作为 data
参数发送到 ajax success
回调:
$.ajax({
type: 'GET',
cache: false,
url: __appPath + 'path/to/my/page',
success: function(data) {
console.log(data); // displays null
}
});
据我所知,此过程中涉及的 jQuery 私有(private)函数是 ajaxConvert
,您可以在 https://github.com/jquery/jquery/blob/master/src/ajax.js#L897-979 中看到它。
请记住以下几点:
如果我从 dataFilter
函数返回一个字符串,jQuery 会正确完成其工作并向我发送一个已解析的 JSON 对象。如果我返回一个预先解析的 JavaScript 对象,jQuery 会将 null
发送到我的 success
回调。在本例中,我使用的是 jQuery 1.5.2,并且此过滤器用于在其他应用程序和旧版本的 jQuery 中工作。现在突然好像不再起作用了。
解决方案
这里:http://forum.jquery.com/topic/datafilter-function-and-json-string-result-problems
最佳答案
Rick Strahl 最近遇到了类似的问题(这似乎是 jQuery 1.5.2 特有的)。由于我不想复制他的工作,这里是他的解决方案,应该可以轻松指导您解决问题:http://codepaste.net/i89xhc
关于jQuery dataFilter 不知何故导致空数据发送到 ajax 成功回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5593311/
我是一名优秀的程序员,十分优秀!