为什么ajax在laravel项目中返回错误响应消息?可能是什么原因?

时间:2018-12-28 09:09:28

标签: php ajax laravel

在开始之前,我已经在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

希望我能在您的帮助下找到解决方法

3 个答案:

答案 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']);