【问题标题】:Ajax receive a collection of objects from LaravelAjax 从 Laravel 接收对象集合
【发布时间】:2015-11-10 15:20:03
【问题描述】:

我目前正在尝试为我的网站创建自己的即时通讯工具(不使用插件 - 我正在尝试手工制作以用于学习目的)并且我正在尝试向服务器发送 ajax 请求以获取列表两个用户之间的所有消息。 我的问题是:ajax 可以“读取”从 Laravel 发送的 Message 对象的集合(怀疑)还是需要以某种方式/方式进行格式化?我最初认为使用列表来获取 sender_id 以及消息(默认情况下按日期排序),但是,我认为 javascript 不能读取 PHP 的(非)数组。到目前为止,我想出的唯一可行的解​​决方案是发送 1 个带有 sender_id 的数组,然后是整个对话的消息,或者 2 个数组 - 一个按顺序发送所有 sender_id,第二个按顺序发送所有消息。

谢谢。

【问题讨论】:

    标签: javascript php jquery ajax laravel


    【解决方案1】:

    您可以使用JSON 在 PHP 和 JavaScript 之间进行通信(查找 PHP json_encode 和 json_decode 函数),它将允许您在语言之间几乎原生地传递复杂的数组。

    编辑:几个例子来说明它是如何工作的,我在这里使用 jQuery 作为我的例子

    通过 AJAX 从 PHP 脚本请求信息

    $.ajax({
        method: 'GET',
        dataType: 'json',
        success: function(data) {
            for (i in data.messages) {
                output(data.messages[i]);
            }
        }
    });
    var output = function(message) {
        console.log(message.id);
        console.log(message.sender.id);
    };
    

    PHP脚本可以输出:

    $messages = array(
        array(
            'id' => 1,
            'message' => 'Awesome',
            'sender' => array(
                'id' => 1, 'name' => 'John',
            ),
        ),
     );
     echo json_encode(array('messages' => $messages));
    

    通过 AJAX 使用 JSON 发送信息

    // Example data object, you can have this infinitely nested
    var data = [
        {id: 1, "message": "test" }
    ];
    $.ajax({
        method: 'POST',
        dataType: 'json',
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
    });
    var output = function(message) {
        console.log(message.id);
        console.log(message.sender.id);
    };
    

    然后 PHP 脚本可以使用:

    $data = json_decode(file_get_contents('php://input'), true);
    // This becomes a simple 2D PHP array which is an exact representation as your JS object. The above example data can be output as:
    foreach ($data as $message) {
        echo $message['id'] . ' - ' .$message['message'];
    }
    

    【讨论】:

    • 好吧,看起来可以将其发送到页面。现在,我将如何获取每个元素?
    • 抓取每个元素是什么意思?就像从页面发送到 php?在 JavaScript 中使用 JSON 对其进行编码并将其发送到 PHP。还是我误解了你的问题?
    • 对不起,我的意思是在将 json 元素发送到页面后读取它。我从来没有处理过 json 元素,所以我不知道它的结构,也不知道如何循环它(或者像 Laravel 中的 $message->sender_id 那样调用每个部分)。
    • 我添加了几个代码示例,它们是否使事情更清晰一些?
    • 是的。非常感谢朋友。
    猜你喜欢
    • 1970-01-01
    • 2013-04-25
    • 2017-03-22
    • 2021-04-16
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多