【问题标题】:Array returns a null value数组返回一个空值
【发布时间】:2017-08-25 18:26:54
【问题描述】:

我通过单击将产品 id 传递给控制器​​的按钮在 ajax 中发出请求,并将其传递给助手。在助手中,通过产品的这个 ID,我将它添加到购物车中,但这在那个问题上并不重要。我在这个助手中创建了一个数据数组并将其返回,控制器将该数组返回给请求。但是当我在数组中发出警报以便我可以看到它让我感到不安时,它会返回一个空值,我不知道为什么会发生这种情况。

Ajax 请求:

function addCartao(product_id){
                alert("entrou");
                alert(product_id);
                $j.ajax({
                  type: "POST",
                  url: "<?php echo Mage::getUrl('fol_carousel/ajax/teste') ?>",
                  data: {
                    product_id: product_id
                  },
                  dataType: 'json',
                  cache : false,
                  beforeSend: function () {
                    alert("beforeSend");
                  },
                  success: function (dados) {
                    alert("success");
                    alert(dados);
                  },
                  complete: function () {
                    alert("complete");
                  },
                  error: function (x,y,z) {
                    alert("error");
                    alert(x);
                    alert(y);
                    alert(z);
                  }
              });
            }

控制器:

$product_id = $this->getRequest()->getPost();
echo json_encode(Mage::helper('fol_carousel/cartao')->addCustom($product_id));

帮助器中创建的数组:

$dados['product_name'] = "teste";
$dados['product_price'] = "2.99";
return $dados;

每次执行ajax请求alert,都会返回null。

【问题讨论】:

  • 假设您得到的alert("success"); 也正确?
  • 没错……
  • 如果您尝试硬编码 echo json_encode(array("product_name"=>"teste")) 警报会给出值吗?
  • 我试过了,这样警报会返回以下内容:[object Object]

标签: php jquery arrays ajax magento


【解决方案1】:

打开开发者工具,查看服务器调用响应中的内容。

验证您的服务器代码是否正在接收您发布的参数并返回正确的数据。

【讨论】:

  • 我不太明白您的意思,但是根据我的理解,您想知道服务器是否正确响应了我的呼叫。因此,与product_id 相关的参数是正确的,因为产品是由助手添加的(正如我在问题中所说,这对于数组而言并不那么重要)。关于数组,它有一个是返回,但我不明白为什么它返回null,因为alert("success")正常执行,之后alert("dados"),但是警报显示为null
【解决方案2】:

您收到 null,因为您在客户端收到的 ajax 响应数据不是有效的 JSON 数据。根据我从您的 cmets 中了解到的情况,当您在服务器端硬编码一个 json 值时,您将在客户端获取 JSON 对象作为响应,这是完美的。所以问题在于服务器端 JSON 响应数据无效

【讨论】:

    【解决方案3】:

    我发现该问题的解决方案是在成功时更改我的 ajax 请求的返回变量并指定一个数组位置。通过在数组中给出alert 来执行此操作,它会返回我的值。

    经过修改的 Ajax 请求代码:

     function addCartao(product_id){
            alert("entrou");
            alert(product_id);
            $j.ajax({
              type: "POST",
              url: "<?php echo Mage::getUrl('fol_carousel/ajax/teste') ?>",
              data: {
                product_id: product_id
              },
              dataType: 'json',
              cache : false,
              beforeSend: function () {
                alert("beforeSend");
              },
              success: function (retorno) {
                alert('success');
                alert(retorno['product_name']);
              },
              complete: function () {
                alert("complete");
              },
              error: function (x,y,z) {
                alert("error");
                alert(x);
                alert(y);
                alert(z);
              }
          });
        }
    

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 2021-07-17
      • 1970-01-01
      • 2015-07-05
      • 2020-02-11
      • 2018-08-06
      • 2021-08-11
      • 2021-07-24
      • 2014-01-27
      相关资源
      最近更新 更多