Ajax получение корзины покупок при загрузке страницы

Я хочу загружать корзину каждый раз, когда загружается страница, но ничего не происходит. Журнал консоли мне тоже ничего не говорит. У меня есть система отправки сообщений в корзину, которая работает нормально, поэтому я не могу понять, почему она не работает. Я использую 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);
}

консоль ничего не пишет, успешный метод не падает, можно добавить в успешный метод alert (JSON.stringify (data)); чтобы увидеть, что вы возвращаете

tdayi 26.10.2018 09:35

Я получаю только это сообщение @tdayi. {"readyState": 4, "responseText": "", "status": 200, "statusText": ‌ "OK"}

Zcylon 26.10.2018 09:41

Вы уверены, что адрес правильный? url: '{{route ("getCart")}}'

tdayi 26.10.2018 09:53

Да я уверен

Zcylon 26.10.2018 09:57

Вы пытаетесь вести журнал в методе cartGet ()?

tdayi 26.10.2018 10:00

У меня есть. Я хотел написать: console.log (data.cartCount); и console.log (данные); Ни один из них не работает. Консоль сообщает мне, что данные не определены.

Zcylon 26.10.2018 10:03

Ваш оператор console.log () находится внутри функции успеха, верно? Просто проверка

Travis Britz 26.10.2018 10:09

Да, я тестировал со всеми альтернативами. Функция завершается успешно, но не возвращает фактических данных. Кажется, что он не может определить данные, но функция по-прежнему работает успешно.

Zcylon 26.10.2018 10:13

@Zcylon посмотрите сюда: stackoverflow.com/questions/32637677/…

tdayi 26.10.2018 10:36
0
9
158
3

Ответы 3

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

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

Спасибо, но это не имело значения. Также echo работает с моей формой сообщения @nakov.

Zcylon 26.10.2018 09:42

это произойдет, если вы откроете ссылку на вкладке браузера, не будет работать в ajax, потому что вы не возвращаете данные. У вас есть код JS в виде лезвия или? Убедитесь, что ваша готовая функция вообще вызывается.

nakov 26.10.2018 09:43

Это в виде лезвия, да, я должен поместить его в отдельный файл js?

Zcylon 26.10.2018 09:46

это нормально, попробуйте console.log в качестве первой строки в вашей готовой функции, чтобы убедиться, что сценарий выполняется.

nakov 26.10.2018 09:46

Я вижу выше еще один ваш комментарий. Так что если это то, что он возвращает, это потому, что вы используете echo вместо return. Удалите dataType: 'json' из файла ajax. А также вернуть данные вместо эха.

nakov 26.10.2018 09:48

Я протестировал, и он выполняется.

Zcylon 26.10.2018 09:48

Сейчас возвращается. Я знаю, что функция прошла успешно при тестировании console.log, но она не обновляет ни одно поле и не передает какие-либо данные.

Zcylon 26.10.2018 09:54

Исходя из кода, если у вас есть элемент с идентификатором cartResult, все должно быть в порядке.

nakov 26.10.2018 09:57

Просто верните $ 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()];
}

Я не совсем понимаю, что вы здесь имеете в виду. Laravel автоматически поймет, что означают данные? Я пробовал ваш код, без разницы: / @simonecosci

Zcylon 26.10.2018 09:47

Да. как вы можете видеть здесь, метод setContent трансформирует ответ в json в случае Arrayable, Jsonable, ArrayObject или JsonSerializable (или is_array) $ content

simonecosci 26.10.2018 10:02

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

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

As of jQuery 1.5, jQuery can convert a dataType from what it received in the Content-Type header to what you require. For example, if you want a text response to be treated as XML, use "text xml" for the dataType. You can also make a JSONP request, have it received as text, and interpreted by jQuery as XML: "jsonp text xml". Similarly, a shorthand string such as "jsonp xml" will first attempt to convert from jsonp to xml, and, failing that, convert from jsonp to text, and then from text to xml.

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

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

Спасибо. Я пробовал вернуть данные. Похоже, моя консоль говорит, что данные не определены независимо от того, что я делаю. Странно также то, что echo json_encode ($ data) работает с кодом сообщения в корзину. @ Трэвис Бритц

Zcylon 26.10.2018 10:04

Другие вопросы по теме