我的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的键值放在哪里,并从查询中使用。
答案 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