我有一个javascript文件,它将AJAX请求发送到php文件,该文件从数据库中获取一些数据。如果php找到任何数据,它会将其作为响应中的json对象返回,但是当它根据查询在数据库中找不到任何recrod时,它会返回类似“找不到匹配”的消息。 这意味着javascript要么在“找不到匹配”或json对象中获取字符串消息。 我试图检查xmlhttp.responseText是json对象还是字符串,但是没有成功。有关如何解决这个问题的任何想法? 我应该将“not match found”字符串转换为json并发送回javascript然后解析它还是有更好的方法来解决这个问题? 谢谢 BR
答案 0 :(得分:0)
也许我不理解您的问题,您是否只是使用以下内容打印错误:
$.ajax({
url: "myphpfile.php",
dataType: "json",
success: function(data){
alert(data.info);
},
error: function(xhr, status, error) {
alert(status);
alert(xhr.responseText);
alert(xhr);
}
});
然后在error
区块内做一些事情?
答案 1 :(得分:0)
我认为您不需要解析错误消息“找不到匹配项”。有两种选择:在ajax调用的PHP文件中创建一个if/else
语句,或者你可以尝试在php文件中编码JSON,如果它不成功,你可以写出“找不到匹配项”错误部分中的消息。我强烈建议您使用$.ajax
调用,因为它可以更好地处理响应。
JS
$.ajax({
url: "myFile.php",
dataType: "json",
success: function(data) {
var myNewJsonData = data;
alert(myNewJsonData);
},
error: function() {
alert("No match found.");
}
});
PHP(myFile.php)
<?php
//Do your query business and stuff here
//Now let's say you get back or store some array that looks like this for example
$myArray = array('name' => 'Mike', 'age' => 20);
/* Now attempt to create a JSON representation of the array using json_encode() */
echo json_encode($myArray);
?>
当您回复它时,它会通过$.ajax
的调用success
或error
函数作为参数(我将其命名为data
)发回,取决于是否报告了错误。如果没有,则调用success
,如果有错误,那么你可以猜出哪一个被调用。 json_encode
将创建您从查询中获取的数据数组的JSON表示。
答案 2 :(得分:0)
即使我完全同意Patrick Q的评论,还有另一个选项没有被提及。您还可以设置响应的Content-Type以指示它是json还是text:
@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
和
@header( 'Content-Type: text/plain; charset=' . get_option( 'blog_charset' ) );
甚至,
@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
然后您可以检查响应的内容类型以做出决定:
$.ajax({
type: "POST",
url: "xxx",
data: "xxx",
success: function(response, status, xhr){
var ct = xhr.getResponseHeader("content-type") || "";
if (ct.indexOf('html') > -1) {
//do something
} else
if (ct.indexOf('json') > -1) {
// handle json here
}
}
});
一个。