0

我正在使用 Stripe 的 API 并尝试检索数据。我有以下代码:

$data = \Stripe_Invoice::all(array(
"customer" => $user->customer_id
));

如果我将 AJAX 响应设置为 $data,则响应显示为空 ( {} )。如果我在后端对其进行调试,我会得到一个巨大的列表,其中包含各种很棒的属性可供使用。我所做的就是:

debug($data); // returns huge data set

问题是我无法访问前端的变量。我想使用:

console.log(response);
html += response.url;

大意是这样的,但是由于某种原因,当前端解释它时,数据是完全空的。

同样的效果,我也不能将它设置为会话(我曾经将会话日志设置为调试,而不是使用调试功能)。

$data // can be accessed on the frontend if we use just php to set a variable
$_SESSION['log'] = $data; // empty

这是怎么回事?我正在使用 PHP 框架 CakePHP 3(最新版本的 Beta)。我认为这与将数据作为序列化返回(也许?)有关,但这并不能解释会话日志记录。这发生在我们发回数据之前:

    $this->set(compact('data', $data));
    $this->set('_serialize', 'data');
4

2 回答 2

0

如果 $data 不为空,那么您应该只使用控制器中的 set 方法

 $this->set(compact('data', $data));

比您应该在 /src/Template/ControllerName/json/methodName.ctp 有相应的视图(将 ControllerName 和 methodName 更改为您所拥有的)

这个文件应该是这样的。

<?php
print json_encode($data);
?>

就这些。您应该将您的数据作为 json 对象放在客户端。

于 2014-10-24T09:20:41.340 回答
0

原来答案是在数组受到保护时无法显示这些值。在 Stripe 对象上调用 Stripe 的方法 __toArray() 使数据可以访问,并且设置工作超过了这一点。

$data = \Stripe_Invoice::all(array(
    "customer" => $user->customer_id
));

$data = $data->__toArray();

$this->set(compact('data', $data));
$this->set('_serialize', 'data');
于 2014-10-24T13:00:45.397 回答