【问题标题】:why ajax return the error response message in a laravel project ? what the possible reasons?为什么 ajax 在 laravel 项目中返回错误响应消息?可能的原因是什么?
【发布时间】:2019-05-26 03:10:12
【问题描述】:

在任何事情之前,我已经在 SOF 和互联网上搜索了我的问题的解决方案,但我没有找到对我的代码有用的解决方案:/

我编写了一个代码,用于在电子商务 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 返回错误警报,为什么?

网络控制台中显示的 url 是 (http://localhost/AishaStore/public/details/11/get-products-price?sizeID=2)

希望我能在你的帮助下找到解决办法

【问题讨论】:

  • 您遇到的实际错误是什么?
  • 你必须调试你的代码
  • 只是提醒来自ajax的错误响应消息我不知道它是如何调试它以及为什么
  • 它在控制台上给我(GET localhost/AishaStore/public/details/%7B%7B%20url('/... 404 (Not Found)))
  • 您的类型:'get',但您发布的是 id ????

标签: php ajax laravel


【解决方案1】:

在你的 ajax 参数中添加:

dataType: 'json'

让我知道它是否有效,但我认为这是您缺少的部分,因为您没有定义要发送到后端的变量的数据类型。有时也发生在我身上,我忘记了。

你也可以添加:

 contentType: "application/json; charset=utf-8",

编辑:

error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}

打印您的错误消息,以便您了解 ajax 的错误以便进行调试。

新编辑:

根据 cmets 的反馈,您的 url 中缺少 id:

Route::get('{id}/get-products-price' , 'SizesController@getProductPrice')->name('get-products-price');

【讨论】:

  • 您的代码是否到达后端?某处一定有错误。而不是 console.log "Error" 显示实际错误。编辑了我的答案以帮助您做到这一点。
  • 它在控制台上给我(GET localhost/AishaStore/public/details/%7B%7B%20url('/…404(未找到))
  • 那你的网址是错误的。问题来自你的路径。再次检查您的网址并将正确的路径放在那里。
  • 我在路径中没有看到任何错误,请您检查一下:/
  • 您发布的网址不对。检查它的格式。 url里面有一个词:url('/get-products-price')没有意义
【解决方案2】:

我认为错误在这里:

url:'/get-products-price',

改成:

url: "{{ url('/get-products-price') }}",  // url() function will generate the right url for the application

然后重试并打开控制台以检查确切的响应。

【讨论】:

  • 它不起作用,我认为这不是它返回错误的原因
【解决方案3】:

除了检查 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']);

【讨论】:

  • 还是给我那个(GET localhost/AishaStore/public/details/…500(内部服务器错误))
  • 除非您禁用了 VerifyCsrfToken 中间件,否则您需要将 X-CSRF-TOKEN 标头添加到您的请求中
  • 如何添加,在哪里添加?
  • 如果你想更新我的答案,我会发给你链接
  • 还是一样的:/它在网络控制台上给出了(例外:“ErrorException”文件:“C:\xampp\htdocs\AishaStore\storage\framework\views\fd07c7172a335e210069af632d15562e6bd5d2cd.php”行:20消息:“尝试获取非对象的属性‘名称’(查看:C:\xampp\htdocs\AishaStore\resources\views\details\show.blade.php)”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 2011-05-15
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2011-11-18
  • 2014-10-08
相关资源
最近更新 更多