Javascript 转换接收到的ajax数据时出现的问题

Javascript 转换接收到的ajax数据时出现的问题,javascript,ajax,Javascript,Ajax,Ajax用于从服务器检索数据 数据在警报状态下成功显示为 data: {"status": "Active","broadcastmsg": "msg"} 但在html中,即显示为未定义的 看起来是个小问题,虽然我从过去24小时就一直在试图解决这个问题,但似乎什么都没用。请说明出了什么问题 Client.php 函数myFunction(val){ $.post(“test.php”, { d_id:1, 日期:val }, 功能(hstatus){ 警报(hstatus); myJSON=

Ajax用于从服务器检索数据

数据在警报状态下成功显示为

data: {"status": "Active","broadcastmsg": "msg"}
但在html中,即

显示为未定义的

看起来是个小问题,虽然我从过去24小时就一直在试图解决这个问题,但似乎什么都没用。请说明出了什么问题

Client.php


函数myFunction(val){
$.post(“test.php”,
{
d_id:1,
日期:val
},
功能(hstatus){
警报(hstatus);
myJSON=JSON.stringify(hstatus);
setItem(“testJSON”,myJSON);
//检索数据:
text=localStorage.getItem(“testJSON”);
obj=JSON.parse(文本);
document.getElementById(“demo”).innerHTML=obj.status;
});
}

编辑

如果我们手动传递
hstatus={“status”:“Active”,“broadcastmsg”:“msg”}
它将显示结果

因此,问题在于从

data:{“status”:“Active”,“broadcastmsg”:“msg”}

{“status”:“Active”,“broadcastmsg”:“msg”}

您可以尝试以下方法:


document.getElementById(“demo”).innerHTML=obj.data.status

您需要通过
obj.data.status
而不是
obj.status
访问您的
status
属性

 document.getElementById("demo").innerHTML = obj.data.status;
更新:

如果JSON数据前面有“data:”部分,则必须修剪:

myJSON = hstatus.substring(6);
见:

选项A: 您应该在
$.post
调用中再包含一个(
dataType
)参数,以便jQuery知道内容类型,否则您将得到纯文本响应。

您还应该检查test.php并确保发送的是
Content-Type:application/json
http头(请参阅:)

选项B:(不推荐) 只需从回调函数中删除
JSON.stringify()
部分:

function(hstatus){
    localStorage.setItem("testJSON", hstatus);
    //Retrieving data:
    text = localStorage.getItem("testJSON");
    obj = JSON.parse(text);
    document.getElementById("demo").innerHTML = obj.status;
});
只是一个提示:

对调试变量值使用
console.log()
命令,以便您可以在浏览器控制台中查看准确的键入值(在大多数浏览器中按F12)。
alert()
函数会自动将所有内容转换为字符串,因此通常会显示误导性结果。

我怀疑的是来自服务器的字符串格式

如果您的警报提供此输出: 数据:{“状态”:“活动”,“广播消息”:“消息”} 那么JSON.parse将无法解析它。因为它不是一个对象或任何类型。这将导致语法错误

下面是您应该从服务器发送的字符串的正确格式,然后一切JSON.parse都会正常工作。 {“数据”:{“状态”:“活动”,“广播消息”:“消息”}

所以我可以猜到的解决方案是: 成功回调的hstatus参数为 因此,尝试以下方法:

myJSON = JSON.stringify(hstatus.data);

如果它不起作用,请告诉我,我会继续挖掘。

也许您的
。状态
中。数据
在响应中?尝试使用
obj.data.status
。如果不起作用,请尝试使用
console.log()
console.dir()
进行调试,它们将比
alert()
更有用。我想调试器是您的朋友。您是否尝试过单步通过它查看您正在接收的内容以及来自本地存储的内容?目前我最好的猜测是,
hstatus
是以字符串的形式出现的,而不是对象。@yuriy636不,undefined根本不显示way@JackA. 如果我通过->hstatus={“status”:“Holiday”,“broadcastmsg”:“6”}它将显示结果。所以问题是它无法读取->数据:{“status”:“Active”,“broadcastmsg”:“msg”}@JackA。问题更新当使用内容类型作为应用程序/json时,未收到任何输出。也通过console.log()检查,输出相同,即数据:{“status”:“Active”,“broadcastmsg”:“6”}是否安全?因为我们在减法string@Observer:我最初的回答是基于您正在从test.php发送有效的JSON响应。但是您发送的是包含一些JSON数据的纯文本。您可以尝试查找第一个出现的“{”字符并拆分字符串。问题出现在php文件中,它包含“data”,我认为这是发送协议的一部分
function(hstatus){
    localStorage.setItem("testJSON", hstatus);
    //Retrieving data:
    text = localStorage.getItem("testJSON");
    obj = JSON.parse(text);
    document.getElementById("demo").innerHTML = obj.status;
});
myJSON = JSON.stringify(hstatus.data);