почему ajax возвращает сообщение об ошибке в проекте laravel?какие возможные причины? - PullRequest
0 голосов
/ 28 декабря 2018

Прежде всего, я искал решение для моей проблемы здесь, в SOF и в Интернете, но я не нашел полезного решения для своего кода: /

Я пишу код для получения цен на продуктыв проекте электронной коммерции Laravel зависит от размера продукта, просто для тестирования я хочу (предупредить) идентификатор размера, и это мой код js, где я использую ajax:

отредактировано

  $(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');

наконец, предупреждение, которое он мне показывает, говорит: (localhost говорит undefined), значит возвращать предупреждение об ошибке из ajax, почему?

URL, показанный в сетевой консоли: (http://localhost/AishaStore/public/details/11/get-products-price?sizeID=2)

Надеюсь, я нашел решение с вашей помощью

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

В ваших параметрах ajax добавьте:

dataType: 'json'

Дайте мне знать, если это сработало, но я думаю, что это та часть, которую вам не хватает, потому что вы не определяете dataType ваших переменных, которые вы отправляете вбэкенд.Иногда случалось так, что я забыл это.

Также вы можете добавить:

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

Редактировать:

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

Распечатайте сообщение об ошибке, чтобы вы знали, в чем заключается ошибка ajax, чтобы выполнить отладку.

Новое редактирование:

На основеобратная связь от комментариев вы пропустили идентификатор в вашем URL:

Route::get('{id}/get-products-price' , 'SizesController@getProductPrice')->name('get-products-price');
0 голосов
/ 28 декабря 2018

В дополнение к проверке токена CSRF в качестве параметра POST промежуточное программное обеспечение VerifyCsrfToken также проверяет заголовок запроса X-CSRF-TOKEN.Например, вы можете сохранить токен в метатеге HTML:

<meta name="csrf-token" content="{{ csrf_token() }}">

Затем, после создания тега meta, вы можете дать указание такой библиотеке, как jQuery, автоматически добавлять токен ко всемЗаголовки запроса.Это обеспечивает простую и удобную защиту CSRF для ваших приложений на основе AJAX:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
})

;

Попробуйте добавить это в свой контроллер

 return response()->json(['success'=>'Record is successfully added']);
0 голосов
/ 28 декабря 2018

Я думаю, что ошибка здесь:

url:'/get-products-price',

измените ее на:

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

и попробуйте снова и откройте консоль, чтобы проверить точный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...