数组 returns 一个空值

Array returns a null value

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

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,它returns me null.

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

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

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

我找到的解决问题的方法是在 ajax 请求成功时更改 return 变量并指定数组位置。通过在数组中给出 alert 来做到这一点,它 return 是我的价值。

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);
          }
      });
    }