2015-10-22 8 views
6

ajaxを使用してLaravelコントローラの関数にobjs配列を渡そうとしています。私はポストの後にいかなるデータも受け取っていません。私のコントローラ機能でJavaScript配列をビューからLaravelコントローラに渡す

<script> 

     var itemCount = 0; 
     var objs=[]; 
     $(document).ready(function(){ 


      var temp_objs=[]; 

      $("#add_button").click(function() { 

       var html = ""; 

       var obj = { 
        "ROW_ID": itemCount, 
        "STREET_ADDRESS": $("#street_address").val(), 
        "CITY": $("#city").val(), 
        "ZIP": $("#zip").val() 
       } 

       // add object 
       objs.push(JSON.stringify(obj)); 

       itemCount++; 
       // dynamically create rows in the table 
       html = "<tr id='tr" + itemCount + "'><td>" + obj['STREET_ADDRESS'] + "</td> <td>" + obj['CITY'] + " </td> <td>" + obj['ZIP'] + " </td><td><input type='button' id='" + itemCount + "' value='remove'></td> </tr>"; 

       //add to the table 
       $("#multiple_table").append(html) 

       // The remove button click 
       $("#" + itemCount).click(function() { 
        var buttonId = $(this).attr("id"); 
        //write the logic for removing from the array 
        $("#tr" + buttonId).remove(); 
       }); 

      }); 

      $("#submit").click(function() { 
       $.ajax({ 
        url:'/app/Http/Controllers/Search/search_address', 
        type: 'POST', 
        dataType:'json', 
        contentType: 'application/json', 

        data: objs 
       }); 

      }); 

     }); 



    </script> 

私はアヤックスでURLに問題があると私は、コントローラのURLを取得する方法を確認していないことを推測し、この

public function search_address(){ 
    $data = json_decode($_POST['data'], true); 
    print_r($data); 
} 

のようなものです。それが動作するかどうかを参照してくださいuse Input;あなたclass extends Controller

上:

$data = json_decode($_POST['data'], true); 

へ:

$data = json_decode(Input::get('data')); 

、あなたが持っていることを確認してください

+0

デベロッパーツールの[ネットワーク]タブを確認してください。 – Rayon

+0

あなたのajaxを読み込んだことがありますか?エラーが発生していないかブラウザのコンソールで確認しましたか? – Vishal

+0

JavaScript/AJAXを一から忘れています... HTML/PHP/Laravelでフォームを作成して、それをやりたいことはできますか?あなたのコントローラとルーティングが最初に機能することを確認したい。 –

答えて

0

は、あなたが変更することはできますありがとうございます。

編集:ルート(コントローラフォルダ)のルートも正しいことを確認してください。

+0

'Input :: post' ??? – Rayon

+0

いいえ、 'Input :: get'、私は現在Laravelと一緒にプロジェクトを進めています。これは私たちがやる方法です。 – Maarten

+0

大丈夫です! '$ _POST'が動作しない理由は何ですか? – Rayon

0

あなたはポストのAjaxで次のように配置することによって、あなたのjavascriptをconsole.log()必要があります:あなたは、あなたがあなたのブラウザの開発者ツールパネルになっているかのエラーを確認でき

error : function(e){ 
    console.log(e); 
} 

明示的に無効にしない限り、Laravelの投稿にはcsrf tokenが必要であることに注意してください。このトークンを投稿に追加する必要があります。私はポイントを説明することではJavaScript、内部のphpを埋め込んだ

$("#submit").on('click', function() { 
    $.ajax({ 
     url:'/app/Http/Controllers/Search/search_address', // Is this what you meant, is this the route you set up? 
     type: 'POST', 
     data: {'data': objs, '_token' : '<?=csrf_token()?>'}, 
     success : function(data){ 
      // Do what you want with your data on success 
     }, 
     error : function(e){ 
      console.log(e); 
     } 
    }); 
}); 

お知らせ:だからで終わる必要があります。理想的にはjavascriptは独自のファイルに保存されているので、このトークンを渡す方法を見つける必要があります。私は個人的に(AngularJSでも人気のある)もののこのタイプのknockoutjsを使用していますが、簡単のような何かを行うことができます:あなたのHTMLに

<input type="hidden" id="_token" value="{{ csrf_token() }}" /> 

を、そしてあなたのAjaxリクエストの中からこの値を引く:

data: {'data': objs, '_token' : $('#_token').val()} 

EDIT

は、私はちょうどあなたが直接コントローラにアクセスしようとしているように見える、あなたのURLを気づきました。使用後

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

:あなたのAJAXリクエストで

url: /searchAddress 

を次のような、あなたのroutes.phpファイルにルートを設定する必要があります。

+0

私はあなたの提案を試みましたが、それはまだ動作しません。私が気づく必要がある他の事柄? –

+0

ブラウザのjavascriptコンソールではどのような結果が得られましたか?また、ログをチェックして、エラーがスローされたかどうかを確認しましたか? –

関連する問題