2015-10-22 114 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控制台中得到了什么结果?另外,你有没有检查你的日志,看看是否有任何错误抛出? –

相关问题