从php响应AJAX的更好方法

时间:2014-11-26 20:46:26

标签: javascript php jquery ajax json

我有一个javascript文件,它将AJAX请求发送到php文件,该文件从数据库中获取一些数据。如果php找到任何数据,它会将其作为响应中的json对象返回,但是当它根据查询在数据库中找不到任何recrod时,它会返回类似“找不到匹配”的消息。 这意味着javascript要么在“找不到匹配”或json对象中获取字符串消息。 我试图检查xmlhttp.responseText是json对象还是字符串,但是没有成功。有关如何解决这个问题的任何想法? 我应该将“not match found”字符串转换为json并发送回javascript然后解析它还是有更好的方法来解决这个问题? 谢谢 BR

3 个答案:

答案 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的调用successerror函数作为参数(我将其命名为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
      } 
  }
});

一个。