2017-12-06 5 views
1

私は本当にLaravelのAJAXリクエスト/レスポンスに悩まされています。誰かが私を助けることができたら嬉しいです。AJAXでデータをLaravelのControllerに渡すには?

は、これは私のJSのAjaxです:

$('#manufacturer_id').change(function(){ 
    var manuf_id = $(this).val(); 
    console.log("1:"+manuf_id); 

    var dataString = '{manufacturer_id:'+ manuf_id+'}'; 
    console.log("2:"+dataString); 

    // Ajax 
    $.ajax({ 
    url: "/laravel/public/posts/create", 
    type: 'GET', 
    data: dataString, 
    cache: false, 
    success: function(data) { 
     console.log(dataString); 
    }, 
    }); 
}); 

そして、これは私がちょうど1つのIDに変更する必要がPostsControllerの、次のとおりです。私は本当に達成したい何

public function create(Request $manuf_id) 
    { 
     $title = 'Add post'; 

     $categories = Category::all(); 
     $manufacturers = Manufacturer::all(); 
     $fuels = Fuel::all(); 

     $sendedID = \Response::json($manuf_id); 
     $cars = Car::where('manufacturer_id', $sendedID)->get(); 

     return view('posts.create', 
      compact(
       'title', 
       'categories', 
       'fuels', 
       'cars', 
       'manufacturers' 
      ) 
     ); 
    } 

を:私のフォームの選択ボックスからユーザーがメーカーを選択すると、製造元のIDはここに書かれたIDを変更します:

$cars = Car::where('manufacturer_id', $sendedID)->get(); 

基本的に変数$ sendedIDの代わりに番号(ID)をハードコードすると、私は必要なものすべてを手に入れます(私のデータベースのテーブル間にはすでに関連性があります)。

私がする必要があるのは、製造元の値(onchange)を送信し、それをPostsControllerの変数$ sendedIDに渡すことだけです。私はおそらく私のPostControllerのコードを変更する必要があります、ちょうど私が既に多くを研究したが、答えを見つけることができませんでした。これを修理する方法を知っている人に感謝します。

答えて

0

JSでは、JSON文字列をサーバーに送信しようとしています。 jQueryはあなたのためにすべてを変換するので、これを行う必要はありません。したがって、必要なparamsで通常のJavascriptオブジェクトを送信してください。

これは、送信されたデータをデコードする必要がなくなり次第サーバーコードをクリーンアップできることを意味します。お使いのコントローラで次に

$('#manufacturer_id').change(function(){ 
    $.ajax({ 
    url: "/laravel/public/posts/create", 
    type: 'GET', 
    data: { manufacturer_id: $(this).val() }, 
    cache: false, 
    success: function(data) { 
     console.log(dataString); 
    }, 
    }); 
}); 

:あなたのJSのために

public function create(Request $manuf_id) 
{ 
    $title = 'Add post'; 

    $categories = Category::all(); 
    $manufacturers = Manufacturer::all(); 
    $fuels = Fuel::all(); 

    $cars = Car::where('manufacturer_id', request('manufacturer_id'))->get(); 

    return view('posts.create', 
     compact(
      'title', 
      'categories', 
      'fuels', 
      'cars', 
      'manufacturers' 
     ) 
    ); 
} 
+0

ありがとうございますが、これは私のためには機能しません。私が成功関数でalert(data)を使うと、現在のページの完全なHTMLコードが得られます。これは単にmanufacturer_idの整数を持つ文字列ではありません。 車種のドロップダウンはmanufacturer_idによって変更されません。 – MadMatt

+0

もちろん、作成メソッドが返すものなので、完全なhtmlが得られます。 –

+0

はい、しかしそのデータをユーザーのページに表示する方法はありますか?私はここで少し混乱しています。なぜなら、AjaxとLaravelを一緒に使って作業することは、まだ私の新しい分野ですから。 – MadMatt

0

は限り私はあなたの質問を理解するように、これは何が必要です:

がありますすべてのあなたのmanufacturersのドロップダウン。ユーザーが1つを選択すると、carsのオプションも変更されます。

あなたはAJAXを介してこれを実現したい場合は、特定のmanufacturerのすべてcarsを返すために別のメソッドを作成する必要があります。さんはその後、あなたのアヤックス方法は、このデータあなたがAJAXリクエストを介してデータを送信するためにX-CSRF-TOKENを添付する必要があり、すべての

$('#manufacturer_id').change(function() { 
    $.ajax({ 
     url: GET_CARS_URL, 
     type: 'GET', 
     data: { manufacturer_id: $(this).val() }, 
     cache: false, 
     success: function(data) { 
      console.log(data); 
     }, 
    }); 
}); 
+0

ありがとうございます、しかし、私はこれを試したとき、変数の車は定義されていないと私はそれをループしようとするとエラーが発生します。私はまだ私の見解では応答を見ていないと私はちょっとそれを行うことはできません。 : – MadMatt

+0

あなたは 'return response() - > json(compact( 'cars'));' –

0

ファーストを取得することができるはず

public function getCars(Request $request) { 
    $cars = Car::where("manufacturer_id", $request->get("manufacturer_id"))->get(); 
    return response()->json($cars); 
} 

を言ってみましょう。チェックの前にajaxリクエストデータがjavascript変数に来て、コントローラのdd()でデータのリクエストがajaxによって正常に送信されています。

経路を確認すると、投稿経由でデータを送信できます。あなたは、PHPの職人のルートですべての登録されたルートをチェックすることができます:コンソールのリストコード...データが正しく受信した場合

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

$.ajax({ 
    url: '/laravel/public/posts/create', 
    type: "post", 
    data: 'id=' + id , 
    success: function (res) { 
     //response 
    } 
}); 

AJAX体にX-CSRF-TOKENを添付する方法

はその後のためのコントローラに確認してください。そのリクエストオブジェクトが$ request-> idのIDにアクセスできる場合

Public function create(Request $request){ 
    dd($request); // this will show data receive from request 
    $id = $request->id // access request object id 
} 
+0

を使うことができます。このページが使用されているので、posts.createはGETメソッドを使用していますフォーム。このフォームの送信はposts.storeに再適用されますが、私はまだajaxからのデータを私のビューに受け取ることができません。そんなに似たような仕事で混乱してしまったのは初めてですが、まだそれを得られません。 – MadMatt

+0

遅れて申し訳ありません。はいGETが表示に使用されます。あなたは資源ルートを使っていますか?それは良い。あなたのフォームアクションは ''/laravel/public/posts/store''でなく、 ''/laravel/public/posts/store''でなければなりません。それにajax URLを変更してください。関数は作成したものを保存しません。 'パブリックファンクションストア(Request $ request){ dd($ request); //これは要求からのデータ受信を表示します $ id = $ request-> id //アクセス要求オブジェクトID } – Niranjana668

関連する問題