我真的很担心Laravel中的AJAX请求/响应,如果有人可以帮助我,我会很高兴。
这是我的JS Ajax:
$('#manufacturer_id').change(function(){
var manuf_id = $(this).val();
console.log("1:"+manuf_id);
var dataString = '{manufacturer_id:'+ manuf_id+'}';
console.log("2:"+dataString);
// Ajax
$.ajax({
url: "/laravel/public/posts/create",
type: 'GET',
data: dataString,
cache: false,
success: function(data) {
console.log(dataString);
},
});
});
这是PostsController,我需要更改一个ID:
public function create(Request $manuf_id)
{
$title = 'Add post';
$categories = Category::all();
$manufacturers = Manufacturer::all();
$fuels = Fuel::all();
$sendedID = \Response::json($manuf_id);
$cars = Car::where('manufacturer_id', $sendedID)->get();
return view('posts.create',
compact(
'title',
'categories',
'fuels',
'cars',
'manufacturers'
)
);
}
我真正想要实现的目标:当用户从我的表单中的选择框中选择制造商时,制造商的ID将更改此处写入的ID:
$cars = Car::where('manufacturer_id', $sendedID)->get();
基本上当我硬编码数字(ID)而不是变量$ sendedID时,我得到了我需要的一切(我已经在我的数据库中的表之间有了相关性)。
我需要做的就是发送制造商的值(onchange)并将其传递给我的PostsController中的变量$ sendedID。我可能需要更改我的PostController中的代码,只是不知道如何,我已经研究了很多,但找不到答案。感谢任何想知道如何修复它的人。
答案 0 :(得分:1)
在你的JS中,你试图将一个JSON字符串发送到服务器。没有必要这样做,因为jQuery将为您转换所有内容,因此只需使用您所需的参数发送一个普通的Javascript对象。
这也意味着您可以清理服务器代码,因为您不再需要尝试解码发送的数据。
对于你的JS:
$('#manufacturer_id').change(function(){
$.ajax({
url: "/laravel/public/posts/create",
type: 'GET',
data: { manufacturer_id: $(this).val() },
cache: false,
success: function(data) {
console.log(dataString);
},
});
});
然后在你的控制器中:
public function create(Request $manuf_id)
{
$title = 'Add post';
$categories = Category::all();
$manufacturers = Manufacturer::all();
$fuels = Fuel::all();
$cars = Car::where('manufacturer_id', request('manufacturer_id'))->get();
return view('posts.create',
compact(
'title',
'categories',
'fuels',
'cars',
'manufacturers'
)
);
}
答案 1 :(得分:0)
据我所知,你需要的是:
您的所有
manufacturers
都有一个下拉列表。当用户选择一个时,cars
的选项也会发生变化。
如果您想通过 ajax 实现此目标,则必须创建一个单独的方法来返回特定cars
的所有manufacturer
。让我们说
public function getCars(Request $request) {
$cars = Car::where("manufacturer_id", $request->get("manufacturer_id"))->get();
return response()->json($cars);
}
然后您的 ajax 方法应该能够检索此数据
$('#manufacturer_id').change(function() {
$.ajax({
url: GET_CARS_URL,
type: 'GET',
data: { manufacturer_id: $(this).val() },
cache: false,
success: function(data) {
console.log(data);
},
});
});
答案 2 :(得分:0)
首先,您必须附加X-CSRF-TOKEN以通过AJAX请求发送数据。在发送ajax请求数据之前检查你的javascript变量,然后在控制器dd()中,ajax成功发送数据请求。
检查路线是否可以通过邮寄发送数据。你可以用php artisan route检查所有已注册的路线:在控制台中列出代码...
如何在ajax体中附加X-CSRF-TOKEN
tidyr
然后检查控制器是否正确接收数据。如果是请求对象,您可以使用$ request-> id
访问该ID$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: '/laravel/public/posts/create',
type: "post",
data: 'id=' + id ,
success: function (res) {
//response
}
});