2017-03-18 4 views
3

リクエストがajaxの場合、コンテンツセクションをレンダリングしてDOMに挿入しています。期待どおりに動作しています。ajaxリクエストで複数のブレードビューセクションをレンダリングする

しかし、私は同じ方法でcontenttitle以上のように複数のセクションをレンダリングする方法を見つけることができません。

コントローラー:

public function awesome(Request $request) { 
    if($request->ajax()){ 
     return view('awesome')->renderSections()['content']; 
    } 
    return view('awesome'); 
} 

Ajaxとpushstate

var load = function (url) { 
    $.get(url).done(function (data) { 
     $("#content").html(data); 
    }) 
}; 

$(document).on('click', 'a[data-request="push"]', function (e) { 
    e.preventDefault(); 
    var $this = $(this), 
    url = $this.attr("href"), 
    title = $this.attr('title'); 

    history.pushState({ 
     url: url, 
     title: title 
    }, title, url); 

    // document.title = title; 

    load(url); 
}); 

layouts.app

<title>@yield('title')</title> 
<meta name="description" content="@yield('desc')"/> 

<a data-request="push" title="AWESOME" href="<?= url('/'); ?>/awesome">Awesome</a> 
<a data-request="push" title="RANDOM" href="<?= url('/'); ?>/random">Random</a> 

<div id="content"> 
    @yield('content') 
</div> 

ブレード:

@extends('layouts.app') 

@section('title', 'Awesome') 
@section('desc', 'About awesome') 

@section('content') 
    some text from awesome page 
@endsection 

質問:

同じ時間でそれらの両方以上をレンダリングする方法は?私は配列などを使うべきですか?例や完全な説明をしてください。

ありがとうございます。

答えて

2

タイトルとコンテンツのjsonオブジェクトを送信し、JSを使用して配列を解析し、両方のセクションを抽出することができます。これと同じように:

コントローラ

public function awesome(Request $request) { 
    if($request->ajax()){ 
     $view = view('awesome')->renderSections(); 
     return response()->json([ 
      'content' => $view['content'], 
      'title' => $view['title'], 
     ]); 
    } 
    return view('awesome'); 
} 

Ajaxと

var load = function (url) { 
    $.get(url).done(function (data) { 
     $("#content").html(data.content); 
     document.title = data.title; 
    }) 
}; 

$(document).on('click', 'a[data-request="push"]', function (e) { 
    e.preventDefault(); 
    var $this = $(this), 
    url = $this.attr("href"), 
    title = $this.attr('title'); 

    history.pushState({ 
     url: url, 
     title: title 
    }, title, url); 

    // document.title = title; 

    load(url); 
}); 
+0

をpushstate私はすでに同じことをやったが、代わりにレスポンスを返すので、私は、ビューをコードして、Ajaxのリクエストでいます私は '' data = $ .parseJSON(data) ''を使っています。しかし、私はそれが同じだと思います。たぶんresponse()は '' laravel''のことでしょう。あなたはどのように思いますか? – Tauras

+0

$ .parseJsonはjson文字列を返す場合にのみ機能します。これは応答jsonメソッドによって行われます。第2に、レスポンスjsonもコンテンツタイプを 'application/json'に設定します。最後に、必ず文字列ではなく、コントローラから応答またはビューを返すようにしてください。これは技術的に正しい方法です:) – Paras

+0

よろしくお願いいたします。この2つの日のうちに私の頭を叩いた。 – Tauras

関連する問題