jQuery.ajax()访问json URL返回字符串而不是json对象

4

我遇到了一个问题,我的complete()回调函数接收到的数据对象不是json对象,而是[Object object]。在data.responseText中可以看到我的json响应的字符串。

这是我的jQuery .ajax请求:

$.ajax({
  url: 'api.php',
  dataType: 'json',
  data: {
    command: "GetBlacklist"
  },
  type: 'POST',
  error: function(jqXHR, textStatus, errorThrown)
  {
    messageDiv.append("Error: " + errorThrown + "<br />");
  },
  complete: function(json)
  {
    $('.blacklist textarea').text(json.message);
    messageDiv.append("Blacklist loaded.");
  }
}); 

以下是发送的响应内容:
{"message":"success","result":0}

它会被解析为有效的JSON格式,并且我已经从服务器发送了正确的JSON内容类型头。但是我对此束手无策!


JSON代表JavaScript对象表示法...一旦字符串被评估,JSON对象就是JavaScript对象。 - Clive
正确……但通过指定“dataType”,响应应该会自动评估,对吗?否则,我看不出指定dataType的意义。我考虑过可以评估我正在接收的data.responseText数据,但我印象中data对象应该是代表服务器响应的JSON对象。 - YWCA Hello
检查从服务器接收到的Ajax调用响应,您可能会进行双重序列化。 - Kris Ivanov
1个回答

3
完整回调函数的签名是complete(jqXHR, textStatus),其中jqXHR会给你一个[Object object]。相反,你应该使用success(data, textStatus, jqXHR)回调函数,如果请求成功,则会调用该函数,这时data将会给你正确的东西。更多信息请查看手册

1
[success] 似乎已经被弃用了...你应该使用 .done,但这并不能解决问题。 - Daniel Apps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接