PHP没有为AJAX调用正确返回JSON

时间:2013-10-17 01:56:39

标签: javascript php jquery ajax json

我有一个PHP函数,它应该将一个JSON对象返回给AJAX调用,但它返回一个字符串。这是我通过AJAX调用调用的PHP。

<?php
  echo json_encode(array("error", 0, "Success!"));
?>

这是AJAX调用。

    $.ajax({
        type: "POST",
        url: "../api/login.php",
        data: { id: username, password: password },
        success: function(response) {
            alert( "Data Saved: " + response );
            $("#login_username").val("");
            $("#login_password").val("");
        }
      });

当此函数返回时,我尝试在控制台中访问响应,这就是发生的事情

response
> "["error",0,"Success!"]"
response[0]
> "["

3 个答案:

答案 0 :(得分:4)

如果您需要一个对象,请在ajax设置中指定dataType:json。它还将确保如果从服务器发送任何无效的JSON,则会因解析错误而导致错误。很可能你没有在响应头中指定的内容类型(application/json; charset=utf-8)允许jquery确定mime类型本身,所以指定dataType确保你得到一个对象或一个错误返回(包含无效的JSON)。

  $.ajax({
    type: "POST",
    dataType:'json'
    url: "../api/login.php",
    data: { id: username, password: password },
    success: function(response) {
        alert( "Data Saved: " + response );
        $("#login_username").val("");
        $("#login_password").val("");
    }
  });

答案 1 :(得分:2)

您的实现似乎是使用jQuery或jQuery的一些模型。如果它不使用jQuery,我将很乐意为您的问题分享更多解决方案。

添加dataType

 $.ajax({
        dataType: 'json',
        type: "POST",
        url: "../api/login.php",
        data: { id: username, password: password },
        success: function(response) {
            alert( "Data Saved: " + response );
            $("#login_username").val("");
            $("#login_password").val("");
        }
      });

问题在于,默认情况下,jQuery需要一个字符串。

var foo = "bar";
foo[1] === "a"; // true

文档:jQuery.ajax

答案 2 :(得分:1)

在你的ajaxcall

中添加一个参数
$.ajax({
    type: "POST",
    url: "../api/login.php",
    data: { id: username, password: password },

    dataType: "json" //-< add this param.

    success: function(response) {
        alert( "Data Saved: " + response );
        $("#login_username").val("");
        $("#login_password").val("");
    }
  });

http://api.jquery.com/jQuery.post/