首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >$http POST请求空数组

$http POST请求空数组
EN

Stack Overflow用户
提问于 2013-10-06 21:02:06
回答 5查看 21.4K关注 0票数 14

下面的$http request成功执行,但是另一端的PHP脚本在接收'test‘和’testval‘时接收空的$_POST数组。有什么想法吗?

代码语言:javascript
运行
复制
$http({
    url: 'backend.php',
    method: "POST",
    data: {'test': 'testval'},
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).success(function (data, status, headers, config) {
    console.log(data);

    }).error(function (data, status, headers, config) {});
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-01-06 13:32:44

如果您只想发送这些简单的数据,请尝试如下:

代码语言:javascript
运行
复制
$http({
    url: 'backend.php',
    method: "POST",
    data: 'test=' + testval,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).success(function (data, status, headers, config) {
        console.log(data);

    }).error(function (data, status, headers, config) {});

而php部分应该是这样的:

代码语言:javascript
运行
复制
<?php
    $data = $_POST['test'];
    $echo $data;
?>

对我来说很管用。

票数 18
EN

Stack Overflow用户

发布于 2013-11-20 17:33:30

这是AngularJS的一个常见问题。

第一步是更改POST请求的默认内容类型标头:

代码语言:javascript
运行
复制
$http.defaults.headers.post["Content-Type"] = 
    "application/x-www-form-urlencoded; charset=UTF-8;";

然后,使用XHR请求拦截器,有必要正确序列化有效负载对象:

代码语言:javascript
运行
复制
$httpProvider.interceptors.push(['$q', function($q) {
    return {
        request: function(config) {
            if (config.data && typeof config.data === 'object') {
                // Check https://gist.github.com/brunoscopelliti/7492579 
                // for a possible way to implement the serialize function.
                config.data = serialize(config.data);
            }
            return config || $q.when(config);
        }
    };
}]);

这样,有效负载数据将再次在$_POST数组中可用。

有关XHR interceptor的更多信息。

另一种可能是对默认的内容类型标头进行处理,然后服务器端解析有效负载:

代码语言:javascript
运行
复制
if(stripos($_SERVER["CONTENT_TYPE"], "application/json") === 0) {
    $_POST = json_decode(file_get_contents("php://input"), true);
}
票数 7
EN

Stack Overflow用户

发布于 2014-07-17 13:23:01

更简化的方式:

代码语言:javascript
运行
复制
myApp.config(function($httpProvider) {
    $httpProvider.defaults.transformRequest = function(data) {        
        if (data === undefined) { return data; } 
        return $.param(data);
    };
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; 
});
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19213903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档