Javascript 通过jqueryajax设置和获取PHP变量

Javascript 通过jqueryajax设置和获取PHP变量,javascript,php,jquery,ajax,chat,Javascript,Php,Jquery,Ajax,Chat,我正在尝试为我自己和一个朋友做一个基本的聊天系统。这很简单,但是ajax让我非常困惑。我使用ajax请求一个php页面,我在其中设置了一个用户名,上次我下载了一个聊天。然而,我不知道如何阅读php页面的回声。我在网上查过了,但是有太多的变化,这让我更加困惑。谁能给我一些指导吗 Scripts.js(已链接jQuery) 下载.php 这是我的php页面作为普通字符串(现在格式正确的JSON)的回声: 我有标题(“内容类型:application/json”)在我的页面顶部。我做错了什么?您的JS

我正在尝试为我自己和一个朋友做一个基本的聊天系统。这很简单,但是ajax让我非常困惑。我使用ajax请求一个php页面,我在其中设置了一个用户名,上次我下载了一个聊天。然而,我不知道如何阅读php页面的回声。我在网上查过了,但是有太多的变化,这让我更加困惑。谁能给我一些指导吗

Scripts.js(已链接jQuery)

下载.php

这是我的php页面作为普通字符串(现在格式正确的JSON)的回声:


我有
标题(“内容类型:application/json”)在我的页面顶部。我做错了什么?

您的JSON响应格式不正确。日期戳后面的逗号位于引号内,而不是引号外:

      "time":"2014-05-09 17:32:00,"      username":"Josue"
   },
此外,您应该使用方括号来表示消息数组。您的JSON应该如下所示:

{ "message": [
   {
      "chat":"Hello, world!",
      "time":"2014-05-09 17:32:00",
       "username":"Josue"
   },
   {
      "chat":"This is my second message.",
      "time":"2014-05-09 17:32:05",
      "username":"Josue"
   }
]
}
您可以使用该函数将PHP数组或对象转换为JSON字符串:

<?php
    $my_arr = array("message" => array());
    $my_arr["message"][] = array("chat" => "Hello, World!", "time" => "2014-05-09 17:32:05", "username" => "Josue");

    echo json_encode($my_arr);
?>


我认为它失败了,因为消息不是数组。消息是一个对象,所以如果您有更多消息,请重新设计发送它们的方式。您的php脚本应该将消息放在json数组中,这样您就可以使用0-index来获取第一个消息了

第一,你的JSON格式不正确<代码>“时间”:“2014-05-09 17:32:00”,“用户名”:“Josue”
应该是
“时间”:“2014-05-09 17:32:00”,“用户名”:“Josue”
。您可能会在浏览器的错误控制台中看到这一点

第二,你需要把你的消息放在一个数组中,否则你只是用每一条新消息覆盖你的
message
属性,所以你的前端只会得到php文件中最低的消息

PHP应该回应这一点:

{
    messages: [
        {
            "chat":"Hello, world!",
            "time":"2014-05-09 17:32:00",
            "username":"Josue"
        },
        {
            "chat":"Second message",
            "time":"2014-05-09 17:32:00",
            "username":"Josue"
        }
    ]
}

然后在JS中,数组将是
data.messages
,其中消息分别是
data.messages[0]
data.messages[1]

重新格式化JSON后,您还可以尝试将JSON字符串解析为javascript对象

var parsed_data = $.parseJSON(data);
// extract data here parsed_data[key]

您确定错误来自打印位置吗?因为在ajax调用之后,您有
latestTimestamp=data.message[0].time;
但是数据变量不再在该范围内!什么是
消息
的一部分
数据.messages
?该设置在哪里?抱歉,Oops将修复JSON输出以反映这一点。谢谢,这很有帮助。
{
    messages: [
        {
            "chat":"Hello, world!",
            "time":"2014-05-09 17:32:00",
            "username":"Josue"
        },
        {
            "chat":"Second message",
            "time":"2014-05-09 17:32:00",
            "username":"Josue"
        }
    ]
}
var parsed_data = $.parseJSON(data);
// extract data here parsed_data[key]