【问题标题】:angularjs can't communicate with php using POSTangularjs 无法使用 POST 与 php 通信
【发布时间】:2026-02-06 23:15:02
【问题描述】:

我试图在我的服务器上从 PHP 发送然后获取数据,但我认为它不会发送数据。

我的js代码:

angular
    .module('h2hApp', [])
    .controller('mainCtrl', ['$scope', '$http', function(scope, http) {

        scope.initGames = function() {
            http({
                method: 'POST',
                url: 'apis.php',
                data: {
                    url: someUrl
                }
            })
                .success(function(data) {
                    console.log(data);
                });
        };

        scope.initGames();
    }]);

还有我的 PHP 文件:

<?php
    $url = $_POST['url'];
    echo file_get_contents($url);
?>

我得到的唯一回应是那个错误:

Notice: Undefined index: url in /my/path/apis.php on line 2

我使用 jQuery 完成了这项工作,但使用 AngularJS 似乎无法正常工作。我是 Angular 的新手,我读过一些其他类似的问题。我尝试了添加标题和其他东西,但没有任何效果。

【问题讨论】:

    标签: javascript php angularjs http post


    【解决方案1】:

    您可以原谅您的 PHP 脚本应该期待 $_POST 变量中的数据,因为将数据编码为查询字符串一直是默认机制。

    Angular 默认将消息体编码为 JSON 对象。如前所述,您可以改用params,但从长远来看,我认为在服务器端符合要求更灵活。例如,您可以按如下方式读取和解码消息正文:

    <?php
        $data = json_decode( file_get_contents('php://input') );
        echo $data->url;
    

    【讨论】:

      【解决方案2】:

      它应该是“参数”,而不是“数据”。见http://docs.angularjs.org/api/ng/service/$http#usage

      【讨论】:

      • 试过了。还是一样的:(
      • 执行“initGames”函数时,您在浏览器的网络日志中看到了什么?
      • @iceless params 作为 api url 的一部分发送 - i.e. 变量将位于 $_GET['url'] 而不是 post。
      • @Emmissary 是的,使用 $_GET['url'] 可以很好地处理参数。谢谢你们!
      【解决方案3】:

      请务必设置 HTTP 标头,如下所示:

      $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
      

      More info on using Post from AngularJS to PHP

      【讨论】:

        【解决方案4】:

        你可以使用http.post()方法——

        试试这个代码 -

        http.post('apis.php', {
                            url: someUrl
                        })
                        .success(function(data) {
                            console.log(data);
                        });
        

        【讨论】:

        • post 方法只是一个辅助函数。他的方法本身并没有错。