2016-03-26 11 views
1

私は2時間以来完全に立ち往生しており、間違いなくあなたの助けが必要です。免責条項:私はコーダーではありません - アイデアを模索しようとしているただの男です。laravelでリダイレクト/ルーティングを理解するのが苦労します

私のページは実際にうまくいきましたが、私はモーダルポップアップから実際のサブページにコンテンツを移動することを考えました。意味:ユーザーがボタンをクリックすると、現在のページからのいくつかのデータポイントが収集され、データポイントを入力として使用してレンダリングされる別のビューに渡されます。

EDIT:説明のために:ボタンは/results.phpにあり、データは動的に生成されます。この方法は、ここからいくつかのデータポイントを取り、新しいビューを生成し、/buy.phpにまたは多分/buy/custom.php

私の考えでそれをレンダリングする必要があります。パラメータなし

  1. ノーマルリダイレクト:内部リダイレクトなししかし、パラメータを持つリンク
  2. 更新ページ内容:

アヤックスだから私の考え組み合わせ - >使用のAJAXをして、新しい新鮮なビューを返します。

$("body").on("click", ".fa-shopping-cart", function() { 

var $para1 = $(this).attr("data1"); 
var $para2 = $(this).attr("data2"); 
var $para3 = $(this).attr("data3"); 
var $para4 = $(this).attr("data4"); 

$.ajax({ 
url: "buy", 
data: { 
    a: $para1, 
    b: $para2, 
    c: $para3, 
    d: $para4 
}, 
beforeSend: function (xhr) { 
    var token = $('meta[name="csrf_token"]').attr('content'); 
    if (token) { 
     return xhr.setRequestHeader('X-CSRF-TOKEN', token); 
    } 
}, 
type: "post", 
success: function(response){ 
    console.log(response); 
}, 
error: function(jqXHR, textStatus, errorThrown) { 
     console.log(JSON.stringify(jqXHR)); 
     console.log("AJAX error: " + textStatus + ' : ' + errorThrown); 
} 
});}); 

ルーティング:

Route::post('/buy', '[email protected]'); 

コントローラー:

public function buy() 
{ 

    $para1= $_POST['a']; 
    $para2 = $_POST['b']; 
    $para3 = $_POST['c']; 
    $para4 = $_POST['d']; 

    // some magic to output $data 

    return view('pages.buy', compact("data")); 

} 

buy.blade.phpは、foreachのループの助けを借りて$データが存在し、表示する私が試した何

だから、私は最初のボタンを明らかに起こっクリックしたとき:/ログインプレーンHTMLで私のコンソールに表示され、ブラウザに表示されていない

ビュー(「pages.buyを」)。

今私は2時間以来ここに座っています。私は何の手がかりも持っていません。私はあなたがajaxコールの中でリダイレクトできないと言っているブログ記事を読んでいます。残念ながら、ポストはそれをどうやって行うのかについて何の示唆もしていませんでした。

誰かが私を助けることができますか?

すべてのあなたの購入方法で

+0

ビュー(「pages.buy」)ログインしている/プレーンHTMLで私のコンソールに表示され、ブラウザでレンダリングされません。 - しかし、成功した場合は、console.log(応答) – Hrach

答えて

0

あなたは、ドキュメントを使用する必要が応答して、文書全体を置き換えたい場合は、あなたのAjaxの成功の機能で

public function buy() 
{ 
    ....//some stuff to get $data 

    $html = view('pages.buy', compact("data"))->render(); 
    return response()->json([ 
     'success' => true, 
     'html' => $html 
    ]) 
} 

。それは最善のことではありません。ビューを返す必要がある場合は、通常のフォーム送信を使用しないでください。

success: function(response){ 
    document.write(response); 
}, 

P.S.また、URLを変更したい場合は、履歴操作関数を使用してください。

https://developer.mozilla.org/en-US/docs/Web/API/History_API

+0

フォームを持っていないときにフォーム送信を使用できますか?データは、行ごとに4つのデータポイントと「詳細情報を取得」ボタンを備えた表形式で表示されます。ボタンをクリックすると、この行の4つのデータ点を見つけて、他のページを生成する必要があります。私はあなたの答えを見ています。ありがとう! – Tilka

+0

それは完璧に動作します!ありがとう! – Tilka

0

最高 -

success: function(response){ 
    if(response.success) 
    { 
     $('#elementId').html(reponse.html) // or whatever you need 
    } 

}, 
+0

だけです。こんにちは、お返事ありがとうございます!問題は、ページの一部をajax呼び出しで「更新」したくないということです。別のサブページに移動したいのです。意味:ユーザーはwww.example.com/results.phpのボタンをクリックし、上記の方法でwww.example.com/buy.phpにリダイレクトされ、動的に生成されるいくつかのパラメータに基づいてレンダリングされますin /results.php。 – Tilka

+0

私は最初に何を思いついたのですか?$ data変数を取得した後、セッションに入れ、$ dataが正しいかどうかに基づいて失敗応答を返す必要があると思います。あなたのajaxの成功メッセージであなたは単に適切なページにリダイレクトする必要があります - window.location = "/ buy";セッションからデータを読み取るだけです。 – Hrach

+0

私はあなたの答えも見ています。良いアイデアをありがとう! – Tilka

関連する問題