在开始之前,我已经在SOF和Internet上搜索了针对我的问题的解决方案,但是我没有找到对我的代码有用的解决方案:/
我编写了一个代码来获取电子商务laravel项目中的产品价格,具体取决于产品尺寸, 只是为了测试,我想(提示)大小id,这就是我使用ajax的js代码:
已编辑
$(document).ready(function(){
$("#selSize").change(function(){
var idSize = $(this).val();
var arr = idSize.split('/');
var productID = arr[0];
var sizeID = arr[1];
//alert(productID);
$.ajax({
type:'get',
data: {sizeID:sizeID},
dataType: 'application/json' ,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
contentType: "application/json; charset=utf-8",
url:productID+'/get-products-price',
success:function(resp){
alert(resp);
},error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
}
});
});
});
这是我浏览产品可能尺寸的html代码:
<h3 class="my-3">Product Sizes</h3>
@if(count($sizes) > 0)
<select id="selSize" name="size"style="width:180px;margin-bottom:40px;height:30px;">
<option>Select size</option>
@foreach($sizes as $size)
<option value="{{$product->id}}/{{$size->id}}">({{$size->width}},
{{$size->height}},
{{$size->length}},
{{$size->thickness}})
(cm)
</option>
@endforeach
</select>
@endif
这就是我使用的控制器功能:
public function getProductPrice(Request $request)
{
$data = $request->all();
echo "<pre>"; print_r($data); die;
}
以及我在其中进行路由的地方:
Route::get('{id}/get-products-price' , 'SizesController@getProductPrice');
最后显示给我的警报说:((本地主机说未定义),意味着从ajax返回错误警报,为什么?
网络控制台中显示的网址为(http://localhost/AishaStore/public/details/11/get-products-price?sizeID=2)
希望我能在您的帮助下找到解决方法
答案 0 :(得分:0)
我认为错误在这里:
url:'/get-products-price',
将其更改为:
url: "{{ url('/get-products-price') }}", // url() function will generate the right url for the application
,然后重试并打开控制台以检查确切的响应。
答案 1 :(得分:0)
在您的ajax参数中添加:
dataType: 'json'
让我知道它是否有效,但是我认为这是您缺少的部分,因为您没有定义要发送到后端的变量的dataType。有时候我也忘记了。
您还可以添加:
contentType: "application/json; charset=utf-8",
编辑:
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
}
打印您的错误消息,以便您了解ajax的错误以进行调试。
新编辑:
根据评论的反馈,您缺少网址中的ID:
Route::get('{id}/get-products-price' , 'SizesController@getProductPrice')->name('get-products-price');
答案 2 :(得分:0)
除了将CSRF令牌作为POST参数进行检查之外,VerifyCsrfToken中间件还将检查X-CSRF-TOKEN请求标头。例如,您可以将令牌存储在HTML元标记中:
<meta name="csrf-token" content="{{ csrf_token() }}">
然后,一旦创建了meta
标记,就可以指示jQuery之类的库将标记自动添加到所有请求标头中。这为基于AJAX的应用程序提供了简单便捷的CSRF保护:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
})
;
尝试将其添加到您的控制器中
return response()->json(['success'=>'Record is successfully added']);