2015-10-22 145 views
6

我想通過objs數組傳遞給Laravel控制器中使用ajax的函數。帖子後我沒有收到任何數據。將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> 

在我的控制器功能是這樣

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

我想,我有在阿賈克斯的網址有問題,我不知道如何獲得一個控制器的URL。

謝謝

+0

檢查開發人員工具中的網絡選項卡。 – Rayon

+0

做了你的ajax加載?你有沒有檢查過你的瀏覽器控制檯,看看是否有錯誤被拋出? – Vishal

+0

忘記關於JavaScript/AJAX的第二件事......你可以用HTML/PHP/Laravel創建一個你想做它的表單嗎?我想確保你的控制器和路由工作第一。 –

回答

0

您可以更改:

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

到:

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

,並確保您有:use Input;以上的class extends Controller

看看是否能工程。

編輯:另外請確保您的路線(在控制器文件夾)是正確的。

+0

'Input :: post' ??? – Rayon

+0

不,'Input :: get',我目前正在與Laravel一起開發一個項目,這是我們如何做的。 – Maarten

+0

好的!任何原因爲什麼'$ _POST'不工作? – Rayon

0

你應該放置在你阿賈克斯後以下console.log()你的JavaScript:

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

您就可以看到你在你的瀏覽器的開發者工具面板中得到什麼錯誤。

你也應該知道,Laravel的帖子需要csrf token,除非你明確地關閉了它們,這意味着你需要將這個標記添加到你的帖子中。所以,你應該結束了:我已經嵌入php的JavaScript,這只是爲了說明這一點,裏面

$("#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保存在它自己的文件中,所以你需要找到一種方法來傳遞這個令牌。我個人使用knockoutjs對於這種類型的事情(AngularJS也很受歡迎),但你可以很容易地做一些事情,如:

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

在你的HTML,然後從你的Ajax請求中擷取這個值:

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

編輯

我剛纔注意到您的網址,它看起來像你試圖直接訪問控制器。你需要建立一個路徑在routes.php文件,如:

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

然後使用:

url: /searchAddress 
在Ajax請求

+0

我嘗試了你的建議,但它仍然無法正常工作。任何其他我需要注意的事情? –

+0

你在瀏覽器的JavaScript控制檯中得到了什麼結果?另外,你有沒有檢查你的日誌,看看是否有任何錯誤拋出? –

相關問題