将数据键值从json post请求传递到路由器到控制器

时间:2015-05-11 16:41:16

标签: php jquery json laravel laravel-5

我的json post请求有一个名为" id"的数据密钥,现在我将如何将它从路由传递给我的控制器?

我的json帖子请求

$.post("/employees", {id:"1"}, function(response){
if(response.success)
{
    var branchName = $('#branchname').empty();
    $.each(response.employees, function(){
        $('<option/>', {
            value:$(this).user_no,
            text:$(this).firstname
        }).appendTo(branchName);
    });
}
}, 'json');

从我的json post请求中可以看到我已经输入了一个键值名称

我的路线

Route::post('employees', [
    'as' => 'employees', 'uses' => 'mot@getemployee'
]);

和我的控制器

public function getemployee($id){
        $employees = employees::where("branch_no", $id)->lists('firstname', 'user_no');
        return response()->json(['success' => true, 'employees' => $employees]);
}

正如你所看到的,我有一个参数$ id,它应该是json post请求中名为id的键值放在哪里,并从查询中使用。

1 个答案:

答案 0 :(得分:0)

由于您在jQuery代码中使用$.post,因此{id: ...}参数作为POST数据传递,这意味着它不是:

public function getemployee($id){

你应该:

public function getemployee() {
 $id = (int)$_POST['id']; //notice that int casting

@KhanShahrukh有一个好点。考虑使用以下代替传统的POST变量:

<?php 
namespace App\Http\Controllers;
use Request;
....
....
class ... extends ... {
  public function ...() {
    if(Request::ajax()) { //Prevent direct access
      $id = Request::input('id;);

关于第二个问题(在评论中提到),$(this)不会引用该对象。要访问对象的属性,您应该向function()函数中的$.each添加参数。 (Manual

所以而不是:

$.each(response.employees, function(){
    $('<option/>', {
        value:$(this).user_no,
        text:$(this).firstname

你应该:

$.each(response.employees, function(firstname, user_no){
    $('<option/>', {
        value: user_no,
        text: firstname