gpt4 book ai didi

jQuery dataFilter 不知何故导致空数据发送到 ajax 成功回调

转载 作者:行者123 更新时间:2023-12-01 01:10:50 25 4
gpt4 key购买 nike

我为返回 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 中看到它。

请记住以下几点:

  • 这不是跨域脚本调用
  • 服务器返回 HTTP200(OK)响应,responseText 包含完整数据
  • 数据已正确发送至 dataFilter 函数
  • dataFilter 函数似乎可以正确解析和修改响应,并返回一个有效的 JavaScript 对象,该对象已解析并可供使用

如果我从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com