通过jQuery AJAX设置和获取PHP变量

时间:2014-05-09 23:34:01

标签: javascript php jquery ajax chat

我试图为自己和朋友制作一个基本的聊天系统。这很简单,然而,ajax让我非常困惑。我使用ajax来请求一个php页面,我设置了一个用户名,以及我最后一次下载聊天。但是,我不知道如何阅读php页面的回声。我已经在网上查了一下,但是有很多变化,让我更加困惑。有人可以给我一些指导吗?

Scripts.js(已经链接了jQuery)

// on document ready + called every second

 $.ajax({
            url: 'download.php',
            type: 'REQUEST',
            datatype: 'json',
            data: ({
                last_downloaded: latestTimestamp,
                username: username
            }),
            success: function (data) {
                console.log(data.message[0].time);
                // Uncaught TypeError: Cannot read property '0' of undefined 
                // how do I get the time from the json?
                // {"message":{"chat":"Hello, world!","time":"2014-05-09 17:32:00,"username":"Josue"},"message":{"chat":"This is my second message.","time":"2014-05-09 17:32:05,"username":"Josue"}}

            }
        });

            latestTimestamp = data.message[0].time;
            downloadingTimer = setTimeout(actuate, timeoutValues[currentTimeoutIndex]);

    }

的download.php

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

[
   {
      "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"
   }
]

我的页面顶部有header("Content-Type: application/json");。我做错了什么?

4 个答案:

答案 0 :(得分:1)

您的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"
   }
]
}

您可以使用json_encode()函数将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);
?>

答案 1 :(得分:0)

我认为它失败了,因为消息不是数组。 message是一个对象,所以如果你有更多的消息重新设计你发送它们的方式。你的php脚本应该把消息放在一个json数组中,这样你就可以得到第一个带有0-index

的消息

答案 2 :(得分:0)

这有两个问题。

一,您的JSON格式不正确。 "time":"2014-05-09 17:32:00," username":"Josue"应为"time":"2014-05-09 17:32:00", "username":"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]

答案 3 :(得分:0)

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

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