【问题标题】:Parsing JSON from HTTP response从 HTTP 响应解析 JSON
【发布时间】:2016-02-13 02:00:33
【问题描述】:

假设我有一个包含代码行的 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(产品)

但都给出“未定义”错误...

谁能帮我解决这个问题?非常感谢。

【问题讨论】:

  • 进行 POST 调用的 JS 代码在哪里?
  • @CharlieS 这正是问题所在,我很难找到它。它被埋在其中一个视图的某个地方。这就是为什么我想知道是否可以在不知道触发 POST 调用的 JS 函数的情况下解析 JSON 响应?
  • 您可能正在寻找this
  • @J.Bush 是的,这是可能的,但我只需要知道我应该怎么称呼它?我试图做 JSON.parse("products"),其中 "products" 是有问题的对象。但它会抛出一个错误,说“产品”未定义。
  • @JeremyRIrawan 函数将那里的字符串解析为名称产品,而不是字符串。请改用JSON.parse('"products"');

标签: javascript php json prestashop prestashop-1.5


【解决方案1】:

如果有帮助,我可以为您指出确切的文件:

  1. /themes/yourtheme/js/modules/blockcart/ajax-cart.js 如果不存在,请查看 /modules/blockcart/ajax-cart.js

看下面的代码注释行“//向服务器发送ajax请求”

  1. /themes/yourtheme/modules/blockcart//modules/blockcart/ 中的Smarty 模板文件blockcart-json.tpl 中形成JSON 答案

所以,如果你将 console.log 放在 ajax-cart.js 中

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

它应该有效。

【讨论】:

  • 这是迄今为止我能得到的最接近的答案,我现在可以访问返回的 JSON 响应。感谢您提示文件的确切位置。但是我需要以不同的视图访问该结果。我想我只需要创建一个全局变量,以便我可以从不同的视图访问它。谢谢。
【解决方案2】:

使用 JSON.parse(response) 转换为 Json 对象并再次转换为字符串使用 JSON.stringify(response)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多