使用ANGLE$http的AJAX请求上的服务器上的空POST数据

时间:2014-10-14 作者:rishat

我使用AngularJS构建一个AJAX表单,然后在运行Wordpress的服务器上进行处理。

服务器端处理程序很简单:

function rnr_contact_callback() {
    $name = $_POST[\'firstName\'] . \' \' . $_POST[\'lastName\'];

    wp_mail(
        \'[email protected]\',
        \'Contact form submitted\',
        $name . \'(\' . $_POST[\'email\'] . \') sent a message: \' . $_POST[\'comment\']
    );

    exit;
}
客户端控制器:

angular.module(\'app\').controller(\'ContactForm\', function($scope, $http) {
    $scope.sendContactForm = function() {
        $http({ 
            method: \'POST\', 
            url: \'/wp-admin/admin-ajax.php\', 
            params: {
                action: \'contact\',
                firstName: $scope.userFirstName,
                lastName: $scope.userLastName,
                email: $scope.userEmail,
                comment: $scope.userComment
            }
        }).success(function(data, status, headers, config) {
            $scope.contactFormSent = true;
        }).error(function(data, status, headers, config) {

        });
    };
});
我测试了$scope 一致性,没关系。此外,还处理了POST请求:我收到一封电子邮件。问题是,电子邮件正文看起来像:() sent a message:. 我的结论是,在服务器上$_POST[\'...\'] 已设置。为什么?我做错了什么?

4 个回复
最合适的回答,由SO网友:rishat 整理而成

我明白了。我应该用$_REQUEST 而不是$_POST 在处理AJAX请求的每个函数中。

SO网友:FlatDev

分析操作:

function angular_ajax_params_to_post() {
    $is_ajax = ( defined( \'DOING_AJAX\' ) && DOING_AJAX );
    if($is_ajax){
        $params = json_decode(file_get_contents(\'php://input\'), true);

        foreach ($params as $param_key => $param_val) {
            $_POST[ $param_key ] = $param_val;
        }
    }
}
add_action( \'plugins_loaded\', \'angular_ajax_params_to_post\' );
此函数用于将角度post字符串解析为$\\u post数组

SO网友:rmmjohann

只是有同样的问题。$\\u请求为空,因为angulars$http默认以JSON的形式发送其数据。Yu必须以formdata的形式发送数据:

var app = angular.module(\'foo\', []);

app.config(function ($httpProvider) {
    // send all requests payload as query string
    $httpProvider.defaults.transformRequest = function(data){
        if (data === undefined) {
            return data;
        }
        return jQuery.param(data);
    };

    // set all post requests content type
    $httpProvider.defaults.headers.post[\'Content-Type\'] = \'application/x-www-form-urlencoded; charset=UTF-8\';
});

SO网友:Magico

您必须在PHP中使用$\\u REQUEST而不是$\\u POST:

function rnr_contact_callback() {
    $name = $_REQUEST[\'firstName\'] . \' \' . $_REQUEST[\'lastName\'];

    wp_mail(
        \'[email protected]\',
        \'Contact form submitted\',
        $name . \'(\' . $_REQUEST[\'email\'] . \') sent a message: \' . $_POST[\'comment\']
    );

    exit;
}

结束

相关推荐

AJAX处理程序中的wp_mail()从不返回

我们有一个jQuery调用的AJAX处理程序。ajax(),它接收存储在服务器上的文档并将其发送给用户。下面是对wp\\U mail的调用,如下所示:$status_wpmail = wp_mail($recipient, $subject, $body, $headers, $filename); 问题是电子邮件永远不会被发送出去,wp\\u mail调用之后的任何代码都不会被解析,包括一条用于转储$status\\u wpmail值的调试语句。然而,发送回页面的jqXHR响应报告“成功”。我