![](/img/trans.png)
[英]How I Handle the time response in jQuery.Ajax (DataType: JSON)?
[英]How to use a different json parser for jQuery.ajax?
我有带有“标记”值的json数据(来自jsonp
源):
{"foo": "@duration:8542"}
我可以通过将函数作为第二个参数传递给JSON.parse来即时解析:
dk.json = {
parse: function (s) {
return JSON.parse(s, function (key, val) {
if (typeof val === 'string' && val[0] === '@') {
var colonpos = val.indexOf(':');
if (colonpos > 1) {
var tag = val.slice(0, colonpos + 1);
switch (tag) {
case dk.Date.tag: return dk.Date.create(val);
case dk.Duration.tag: return dk.Duration.create(val);
}
}
}
return val;
});
},
//...
};
但是如何将这个解析函数插入jQuery.ajax()
? 比以下更明智的选择:
success: function (data) {
data = dk.json.parse(JSON.stringify(data));
...
dataFilter
,尤其是converters
看起来很有希望:
$.ajax({
dataType: 'jsonp',
converters: {
'text json': dk.json.parse
},
// ...
});
但这根本不会被调用(dataFilter被调用,但是data参数设置为undefined)。
我要去哪里错了?
[编辑:]
我知道我可以编写遍历jQuery返回的JSON对象的遍历函数,例如:
function untag(val) {
if (typeof val === 'string' && val[0] === '@') {
var colonpos = val.indexOf(':');
if (colonpos > 1) {
var tag = val.slice(0, colonpos + 1);
switch (tag) {
case dk.Date.tag: return dk.Date.create(val);
case dk.Duration.tag: return dk.Duration.create(val);
}
}
}
return val;
}
var untag_json = function (jsonobj) {
var _traverse = function _traverse(obj, result) {
var value;
for (var attr in obj) {
value = obj[attr];
if (value && typeof value === 'object') {
result[attr] = _traverse(value, {});
} else {
result[attr] = untag(value);
}
}
return result;
};
return _traverse(jsonobj, {});
};
然后在success
处理程序中调用它:
success: function (data) {
data = untag_json(data);
...
但这似乎是很多不必要的工作。没有办法使用$.ajax
的converters
参数来访问未解析的(即文本)json源吗?
实际上,JSONP请求( src )中没有任何JSON解析,这似乎很不直观。 发生的是,从JSONP端点返回的字符串被评估为JavaScript(具有对在发出JSONP请求的DOM中定义(或动态添加)的函数的引用,如下所示):
_callback({'foo':'@duration:8524'});
如果要使用函数,则需要使端点返回类似以下的String:
_callback("{'foo':'@duration:8524'}");
然后在JSONP回调中,您可以调用JSON.parse()
。 JSON解析是一种处理JSON的相当安全的方法,因此,如果这样更易于推理,那将是一个很好的方法。
嗨,您需要在服务器端的响应中设置此标头application / json,然后只需设置dataType:json或dataType:jsonp即可,而无需对json进行字符串化或解析。 然后,您只需从json获取对象,属性或数组。
例如:在php中,我们使用
$json_string = "{"foo": "@duration:8542"}";
$json = json_decode($json_string);
$foo = $json->foo;
echo $foo;//prints @duration:8542
在jquery中,您可以执行以下操作:
sucess:function(response) {
var foo = response.foo;
console.log(foo);
}
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.