我有一个简单的AJAX调用,服务器将返回一个带有有用数据的JSON字符串或一个由PHP函数mysql_error()产生的错误消息字符串。如何测试该数据是JSON字符串还是错误消息。
使用一个名为isJSON的函数会很好,就像你可以使用instanceof函数来测试某个东西是否是数组一样。
这就是我想要的:
if (isJSON(data)){
//do some data stuff
}else{
//report the error
alert(data);
}
你可以做一些测试,例如,如果你知道返回的JSON总是被{和}包围,那么你可以测试这些字符,或者其他一些hack方法。或者你可以使用json.org JS库来尝试解析它,并测试它是否成功。
然而,我建议另辟蹊径。如果调用成功,PHP脚本当前返回JSON,如果调用失败,则返回其他内容。为什么不总是返回JSON?
E.g.
成功的电话:
{ "status": "success", "data": [ <your data here> ] }
错误的电话:
{ "status": "error", "error": "Database not found" }
这将使您的客户端JS编写更容易-你所要做的就是检查“status”成员和相应的行为。
嗯…这取决于你接收数据的方式。我认为服务器正在响应一个JSON格式
字符串(在PHP中使用json_encode(),例如)。如果你正在使用JQuery post并将响应数据设置为JSON格式,并且它是一个格式错误的JSON,这将产生一个错误:
$.ajax({
type: 'POST',
url: 'test2.php',
data: "data",
success: function (response){
//Supposing x is a JSON property...
alert(response.x);
},
dataType: 'json',
//Invalid JSON
error: function (){ alert("error!"); }
});
但是,如果你使用类型响应作为文本,你需要使用$. parsejson。根据jquery网站:
“传递一个格式错误的JSON字符串可能导致抛出异常”。因此你的代码将是:
$.ajax({
type: 'POST',
url: 'test2.php',
data: "data",
success: function (response){
try {
parsedData = JSON.parse(response);
} catch (e) {
// is not a valid JSON string
}
},
dataType: 'text',
});
你可以尝试解码它并捕获异常(本机或json2.js):
try {
newObj = JSON.parse(myJsonString);
} catch (e) {
console.log('Not JSON');
}
但是,我建议将响应始终设置为有效的JSON。如果你从你的MySQL查询中得到一个错误,简单地发送回JSON错误:
{"error":"The MySQL error string."}
然后:
if (myParsedJSON.error) {
console.log('An error occurred: ' + myParsedJSON.error);
}