2014-10-30 44 views
1

即時通訊使用Laravel創建一個相當簡單的應用程序。將兩個JSON模型對象從PHP通過AJAX傳遞給JS

我有這樣的控制器功能偉大的工作:

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了。

這裏是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); 

雄辯的關係設置正確。 $笑話 - >用戶肯定工作,因爲我放置:

Route::get('/var', function() 
{ 
$joke = Joke::find(1); 
$user = $joke->user; 
dd($user); 
}); 

在routes.php,它通過完美。

我在哪裏跳閘?

回答

1

嘗試轉換的用戶和李冰冰回到他們之前反對數組:

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()]); 
} 
+0

謝謝你,這也適用像的toJSON方法。但是,它不會讓我像我想要的那樣在js中訪問我的變量。 data.joke.joke或data.user.email中斷腳本。如果我只顯示'data.joke',它將通過JSON對象和它們的所有屬性來實現,如果我將'data.user'顯示爲它的用戶JSON對象。我如何在AJAX上成功訪問這個問題? – diabetesjones 2014-10-30 19:20:33

+1

編輯:沒關係,它實際上與你的工作,但不與toJson。非常感謝你! – diabetesjones 2014-10-30 19:42:50