2016-07-03 23 views
0

以下の機能は、POSTリクエストによって呼び出されます。私は自分のデータベースからURLを取得し、新しいタブでリンクを開く必要があります。私はこのためにRedirect::away()関数を使用しています。しかしそれはMethodNotAllowedHttpExceptionを与える。私はGETリクエストでこの関数を呼び出そうとしましたが、それは問題なく動作します。Laravel 5:POST要求時に外部リンクにリダイレクト

public function generateURL(Request $request) { 

    $screenRow = \App\ScreenshotRow::find($request->input('row_ID')); 
    $baseURL = $screenRow->BaseURL; 

    $screenshot = \App\Screenshot::where('Setname', '=', $screenRow->Setname)->get(); 
    $pageURL = $screenshot[0]['PageURL']; 

    if ($baseURL == "") { 
     return Redirect::away($PageURL); 
    } 

    else 
     return Redirect::away($baseURL); 
} 

POSTリクエストに応答してこの関数を呼び出す方法はありますか?

答えて

1

私は単にAjaxフォームを使用して、Javascriptでユーザーをリダイレクトします。

あなたのフォームにID

<form id="myForm" method="POST" action="{{ route('your.route') }}"> 
... 
... 
<button type="submit">Submit the Form</button> 

を与え、このフォームのAjax

<script> 
    $('#myForm [type="submit]').click(function(e){ 
     e.preventDefault(); 

     var form = jQuery(this).parents("form:first"); 
     var dataString = form.serialize(); 
     var formAction = form.attr('action'); 

     $.ajax({ 
      type: "POST", 
      url : formAction, 
      data : dataString, 
      success : function(data){ 
       var url = $.parseJSON(data.responseText); 
       console.log(data); 
       // Redirect to a new tab with the given url 
       window.open(url.success, '_blank'); 
      }, 
      error : function(data){ 
       var error = $.parseJSON(data.responseText); 
       console.log(error); 
       // Do what ever you want with an Error Message 
       alert(error) 
      } 
     },"json"); 
    }); 
</script> 

オーケーで作業を行うことにしてください - だからフォームが成功メッセージを受信した場合、success関数が実行されますそれ以外の場合はerror機能です。

は今すぐリクエスト

public function generateURL(Request $request) { 

    $screenRow = \App\ScreenshotRow::find($request->input('row_ID')); 
    $baseURL = $screenRow->BaseURL; 

    $screenshot = \App\Screenshot::where('Setname', '=', $screenRow->Setname)->get(); 
    $pageURL = $screenshot[0]['PageURL']; 

    // Return a JSON Success Message with a Success HTTP Status Code 
    if ($baseURL == "") { 
     return response()->json(['success' => $PageURL], 200); 
    } 

    // Return a JSON Error Message with a Error HTTP Status Code 
    else 
     return response()->json(['error' => $baseURL], 400); 
} 

を扱うバックエンド・コントローラーに行くことができますあなたのバックエンドは、成功メッセージに与えられたURLに基​​づいて、新しいタブにリダイレクトと呼ばれているAjaxのフォームの成功の機能をスローした場合にどのあなたはあなたのバックエンドコントローラ成功応答を渡しました。

NOTE

Ajaxリクエストにtokenmismatchexceptionを避けるために、あなたはあなたの<head>csrf_tokenにごmetaセクションを追加する必要があります。

<meta name="csrf-token" content="{{ csrf_token() }}"> 

、それはまだMethodNotAllowedHttpExceptionを与えるすべてのフォーム要求

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 
+0

にこのcsrf_tokenを取得。私もGETリクエストでこれを試してみましたが、問題はありません。 –

+0

私は単にAjaxフォームを使用し、window.open(url、 '_blank')でユーザーをリダイレクトします。 – bobbybackblech

+0

それは良い提案です。ありがとう! –

関連する問題