通过 AJAX 将两个 JSON 模型对象从 PHP 传递到 JS

Posted

技术标签:

【中文标题】通过 AJAX 将两个 JSON 模型对象从 PHP 传递到 JS【英文标题】:passing two JSON model objects from PHP to JS via AJAX 【发布时间】:2014-12-26 23:01:31 【问题描述】:

我正在使用 Laravel 开发一个相当简单的应用程序。

我在控制器功能中有这个功能很好:

    if(Request::ajax())
    
        $joke = Joke::where('type', '=', 'kid')->get()->random(1);

        if (Session::has('joke'))
        
            Session::forget('joke');
        

        Session::put('joke', $joke);
        return Response::json($joke);
    

但是,如果我将最后几行更改为:

Session::put('joke', $joke);
$user = $joke->user;
return Response::json([ 'joke' => $joke, 'user' => $user);

ajax 调用成功,但我不能在我的 JS 中使用 $joke 或 $user。

这里是 ajax 调用:

$.ajax(
        type: "POST",
        url: url,
        data:  rating: userRating ,
        success: function(data)
            var textString = 'Thanks for rating! This little gems score is a sweet ' + data.joke.rating + '!';
            $('.jokeRating').html(textString);

        ,
        error: function()
            // load a message indicating it didnt work
            $('.jokeRating').html('It didnt work, sorry!');
        ,
    );

我想补充的是

var authorString = '~' + data.user.name;
            $('.author').html(author);

雄辩的关系设置正确。 $joke->user 确实有效,正如我所说:

Route::get('/var', function()

$joke = Joke::find(1);
$user = $joke->user;
dd($user);
);

在 routes.php 中,它完美地通过了。

我在哪里绊倒了?

【问题讨论】:

【参考方案1】:

在返回之前尝试将 User 和 Joke 对象转换为数组:

if(Request::ajax())

    $joke = Joke::where('type', '=', 'kid')->get()->random(1);

    if (Session::has('joke'))
    
        Session::forget('joke');
    

    Session::put('joke', $joke);
    return Response::json([ 'joke' => $joke->toArray(), 'user' => $user->toArray()]);

【讨论】:

谢谢,这也像 toJson 方法一样工作。但是,它不会让我像我想要的那样访问我在 js 中的变量。 data.joke.joke 或 data.user.email 破坏脚本。如果我只显示“data.joke”,则它带有 JSON 对象及其所有属性,如果我显示“data.user”,它只是用户 JSON 对象。我如何在 AJAX 中成功访问它? edit:没关系,它实际上适用于您的,但不适用于 toJson。非常感谢!

以上是关于通过 AJAX 将两个 JSON 模型对象从 PHP 传递到 JS的主要内容,如果未能解决你的问题,请参考以下文章

通过 AJAX 调用将 JSON 对象列表传递给控制器

通过jquery ajax将json对象传递给webmethod

在 node.js 的帮助下在服务器上运行 three.js,将模型导出为 json 并通过 ajax 加载给最终用户

Ajax 将带有两个数组的 JSON 对象发送到一个 servlet 并在没有 jQuery 的情况下在 java servlet 中解析

如何将 Json 对象从 ajax 传递到 spring mvc 控制器?

Ajax与JSON的一些总结