【发布时间】:2016-11-23 08:20:08
【问题描述】:
我通过 Ajax 将幻灯片 (Jquery Ui Slider) 中的每个滑块值获取到我的控制器。
Slider + Ajax 看起来像这样:
$("#sliderNumCh").slider({
range: "min",
min: 0,
max: 20,
step: 1,
value: numbersOfChapters,
change : function(e, slider){
$('#sliderAppendNumCh').empty();
var sliderValue = slider.value;
var getSliderVal = document.getElementById('sliderValue').value = sliderValue;
var getPrId = document.getElementById('editId').value;
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: 'post',
url: "{{ Route('editProductPost', $product->id) }}",
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
data: {
value: getSliderVal,
productId : getPrId
},
success: function (option) {
console.log(getSliderVal);
}
});
},
});
所以我确实有这个想法:
<meta name="csrf-token" content="{{ csrf_token() }}">
我的路线是这样的:
Route::post('edit/{productID}', ['as' => 'editProductPost', 'uses' => 'ProductController@editProductPost']);
在我的 Controller 方法中,我这样称呼它:
public function editProductPost(Request $request)
{
$sliderValue = $request->get('value');
Log::info($sliderValue);
return view('productRom.edit', [
'sliderValue' => $sliderValue
]);
}
Log::info($sliderValue) 告诉我,我确实在每张幻灯片上都得到了正确的滑块值。
当我尝试返回到我的编辑视图时,我在控制台中收到此错误:
POST http://localhost/myApp/public/product/edit/73 500(内部 服务器错误)
我该如何解决这个问题?
编辑
因为我认为这行:
<form action="{{ route($route) }}"...>
路由变量没有定义,所以我在返回语句中添加了这个。
return view('productRom.edit', [
'sliderValue' => $sliderValue,
'route' => 'editProductPost'
]);
错误消失了,但是当我尝试像这样访问 $sliderValue 变量时:
<p>{{ isset($sliderValue) ? $sliderValue : "nothing" }}</p>
它打印我nothing
编辑
控制器:
public function editProductPost(Request $request)
{
return response()->json([
'sliderValue' => $request->get('value')
]);
}
查看(ajax):
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: 'post',
url: "{{ Route('editProductPost', $product->id) }}",
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
data: {
value: getSliderVal,
productId : getPrId
},
success: function (response) {
// check it has some data
if (response.length) {
// spit it out
console.log(response);
} else {
console.log('nothing returned');
}
}
});
【问题讨论】:
-
您说“当我尝试返回到我的编辑视图时,我在控制台中收到此错误”尝试单击发布请求,您会在预览下看到什么?
-
@haakym 好的,我想我可以快速编辑问题
-
1.你还没有完成我在第一条评论中所说的。 2. 正如我在前几天的聊天中所说的“......您的 editProduct 方法返回一个视图,如果您将它用于 ajax,请不要返回视图,返回 json 数据”chat.stackoverflow.com/transcript/message/31766104#31766104 - 希望很清楚。
-
嗯好的,所以我不能用 ajax 返回视图。但是如何进一步使用该 json 数据呢?
-
看我的回答。我认为您需要阅读有关 ajax 请求如何工作的文档,然后您就会明白为什么不能返回视图。想想你为什么使用 ajax 请求,这样你就不需要离开当前页面/即当前视图 - 那你为什么要把它传回视图。返回视图适用于不使用 ajax 的情况。您想返回 json,以便您的
$.ajax成功方法可以使用它。
标签: javascript php jquery ajax laravel