Ajax получить корзину на странице загрузки - PullRequest
0 голосов
/ 26 октября 2018

Я хочу загружать корзину, когда страница загружена, но ничего не происходит. Журнал консоли тоже ничего не говорит. У меня есть система отправки сообщений в корзину, которая работает нормально, поэтому я не могу понять, почему это не работает. Я использую Laravel с плагином корзины.

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

  $.ajax({
    type: 'get',
    url: '{{route("getCart")}}',
    error: function(data) {
      var errors = data.responseJSON;
      console.log(errors);
    },
    dataType: 'json',
    success: function(data) {
      $('#cartResult').html(data.cartCount)
    },
  });
});
public function cartGet() 
{
  $cartCount = Cart::content() - > count();
  $data = array('cartCount' => $cartCount);
  echo json_encode($data);
}

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Просто верните $ data, laravel поместит правильный заголовок в ответ. если вы вернете json_endode ($ data), будет размещен заголовок Content-type: text / plain, если вы вернете $ data (которая является структурой), laravel будет скрывать json_encode и размещать заголовок Content-type: application / json. ваш код должен выглядеть так:

public function cartGet() 
{
  return ['cartCount' => Cart::content()->count()];
}
0 голосов
/ 26 октября 2018

Это может быть потому, что в вашем вызове $ .ajax вы установили dataType: 'json'

Из документов :

Начиная с jQuery 1.5,jQuery может преобразовать dataType из того, что он получил в заголовке Content-Type, в то, что вам нужно.Например, если вы хотите, чтобы текстовый ответ обрабатывался как XML, используйте «text xml» для dataType.Вы также можете сделать запрос JSONP, получить его в виде текста и интерпретировать с помощью jQuery как XML: «jsonp text xml».Аналогично, сокращенная строка, такая как «jsonp xml», сначала попытается преобразовать из jsonp в xml, а в случае неудачи - из jsonp в текст, а затем из текста в xml.

Когда выecho json_encode(), он отправляет данные прямо в буфер потока вывода php, и Laravel не знает, что ему нужно добавить заголовок Content-Type: application/json в свой ответ.Без этого, возможно, jQuery нужно, чтобы dataType был «text json»?

Как уже упоминалось, вы можете return $data с вашего контроллера.Laravel автоматически приведёт ваш массив к json, а также установит соответствующие заголовки Content-Type.Может быть, попробовать сначала?

0 голосов
/ 26 октября 2018

Попробуйте return json_encode($data); вместо echo.

Вы также можете избежать json_encode и просто использовать return $data;.

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