1

我有一个 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]
> "["
4

3 回答 3

4

如果您期望一个对象,请dataType:json在 ajax 设置中指定。它还将确保如果从服务器发送任何无效的 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("");
    }
  });
于 2013-10-17T02:01:15.223 回答
2

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

添加数据类型

 $.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

于 2013-10-17T02:00:40.610 回答
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/

于 2013-10-17T02:08:35.977 回答