Разбор JSON из ответа HTTP

Предположим, у меня есть URL-адрес http://example.com/product/12345, который содержит строки кода. Этот URL-адрес является страницей продукта с веб-сайта электронной коммерции, и на этой странице находится кнопка «Добавить в корзину».

Когда эта кнопка нажата, она отправляет HTTP POST относительно просмотренного продукта и возвращает следующий ответ JSON:

{
"products": [
{
"id":            722,
"link":          "http://example.com/product/123123",
"image_link":    "http://example.com/prodcut/image/thumb.jpg",
"image_width":   "45",
"image_height":  "45",
"quantity":      1,
.... and so on...

Я хотел бы знать, можно ли проанализировать ответ, не зная, какая функция его вызывает, потому что:

  1. Эта страница состоит из нескольких представлений (которые отображаются с разных контроллеров).
  2. Я пытался делать такие вещи, как:

    console.log(response.products) или; console.log(продукты)

но все дает "неопределенную" ошибку...

Может ли кто-нибудь помочь мне в этом? Большое спасибо.


person Jeremy    schedule 12.02.2016    source источник
comment
Где ваш JS-код, который выполняет вызов POST?   -  person Charlie Schliesser    schedule 12.02.2016
comment
@CharlieS именно в этом проблема, мне трудно ее найти. Он зарыт где-то в одном из видов. Вот почему я хочу знать, можно ли проанализировать ответ JSON, не зная, какая функция JS запускает вызов POST?   -  person Jeremy    schedule 12.02.2016
comment
Возможно, вы ищете это   -  person J. Bush    schedule 12.02.2016
comment
@ Дж. Буш, да, это возможно, но мне просто нужно знать, как мне это назвать? я попытался сделать JSON.parse(products), где продукты являются рассматриваемым объектом. Но он выдает ошибку, говоря, что продукты не определены.   -  person Jeremy    schedule 12.02.2016
comment
@JeremyRIrawan Строка анализируется функцией как название продуктов, а не строка. Вместо этого попробуйте JSON.parse('"products"');.   -  person J. Bush    schedule 12.02.2016
comment
@JeremyRIrawan Извините, неправильно истолковал вопрос. Я предполагаю, что ваша проблема заключается в том, что вам возвращают строку, которая представляет объект JSON. Вам нужно разобрать его, прежде чем вы сможете взять response.products. Что-то вроде: var parsedResponse = JSON.parse(response); Я не знаю, что это был за запрос, поэтому не могу сказать наверняка.   -  person J. Bush    schedule 12.02.2016


Ответы (2)


Я могу указать вам точные файлы, если это поможет:

  1. /themes/yourtheme/js/modules/blockcart/ajax-cart.js, если не существует, посмотрите на /modules/blockcart/ajax-cart.js

посмотрите, как код ниже строки комментария "//отправляет запрос ajax на сервер"

  1. И ответ JSON формируется в файле шаблона Smarty blockcart-json.tpl в /themes/yourtheme/modules/blockcart/ или /modules/blockcart/

поэтому, если вы поместите console.log в ajax-cart.js в

success: function(jsonData,textStatus,jqXHR)
            {
                console.log(jsonData.products); // not parsed json here of course
                ...
                },

это должно работать.

person Serge P    schedule 12.02.2016
comment
Это, безусловно, самый близкий ответ, который я могу получить, теперь я могу получить доступ к возвращенному ответу JSON. Спасибо, что указали точное местонахождение файла. Однако мне нужно получить доступ к этому результату в другом представлении. Думаю, мне просто нужно создать глобальную переменную, чтобы я мог получить к ней доступ из другого представления. Спасибо. - person Jeremy; 13.02.2016

используйте JSON.parse(response) для преобразования в объект Json, а для повторного преобразования в строку используйте JSON.stringify(response)

person Bhushan Pawar    schedule 12.02.2016