【问题标题】:AngularJS $http.post returns an empty variable on successful callbackAngularJS $http.post 在成功回调时返回一个空变量
【发布时间】:2016-04-06 03:20:19
【问题描述】:

在我的 Angular 应用程序中,我试图将数据发送到 php 脚本,然后返回一个回调。

这里是角码:

var data = { value: 'somestring' };

$http.post("post_backend.php", data).success(function(data, status) {
    alert(data + status);
}).error(function(data, status) {
    alert(data + status);
});

在我的 php 代码中,我有一个简单的回调函数:

if (isset($_POST['value'])) {
    header('Content-Type: application/json');
    echo json_encode('successful callback');
    exit();
}

但是当它执行时,我在警报消息中得到一个成功状态,没有别的。 我没有得到数据('成功回调')并且大约几个小时都无法弄清楚,这是什么问题?

【问题讨论】:

  • 看起来if (isset($_POST['value'])) 条件从未满足。如果你 echo($_POST) 怎么办? PHP 收到什么?
  • @JeremyThille 你是对的,条件不满足。但问题是什么?我该如何解决?
  • 不要使用alert() 而是使用console.log() 并在浏览器中打开您的开发工具,这样可以防止调试数据格式错误。也不要使用+ 运算符,而是使用逗号分隔参数,如下所示:console.log(data, status)。确保控制台中没有错误并检查网络选项卡以查看请求是否正确触发。
  • @MyOwnFan What is the problem? How can I fix it? 这就是我们想要在这里找到的。因此我的问题是“如果你 echo($_POST) 怎么办?PHP 收到什么?”如果您回答,那将很有帮助:)
  • @JeremyThille 它返回一个空字符串。正如我所说,你是对的,if 语句没有被触发。

标签: javascript php angularjs


【解决方案1】:

此代码对我有用。

$params = json_decode(trim(file_get_contents('php://input')), true);
if (isset($params['value'])) {
    header('Content-Type: application/json');
    echo json_encode(['status'=>'successful callback']);
    exit();
}

【讨论】:

  • 应该有一种比获取文件内容更简单、更安全的方法。这是不安全的,需要指定从哪个文件接收输入。 PHP 应该作为服务工作...
【解决方案2】:

我找到了答案。我不得不重新配置将数据发送到 php 脚本的方式。我发现这篇非常有用的文章:How can I post data as form data instead of a request payload?

我必须实现 jquery 并将标头添加到我的请求中。在 php 脚本中,我不需要任何东西,除了 if 语句和 echo。

【讨论】:

  • 可以自己回答问题。事实上,这是值得鼓励的,因为它将帮助其他人在未来遇到类似的问题。
【解决方案3】:

尝试 put 以响应正确的 JSON,例如 echo json_encode(['status'=>'successful callback']);

【讨论】:

  • 这不是问题的答案,只是一个建议。应该作为评论。
  • 你添加了 $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';到你的应用程序? PHP 不能正确使用“Content-Type: application/json”
  • @Viktor 我该怎么做?
  • 当我制作我的 AngularJS + PHP 应用程序时,我使用了这篇文章 victorblog.com/2012/12/20/…
猜你喜欢
  • 1970-01-01
  • 2013-06-06
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 2018-05-18
  • 2017-01-16
  • 1970-01-01
相关资源
最近更新 更多