离子框架http发帖请求

时间:2015-07-25 13:18:54

标签: php angularjs http post ionic

我想从离子应用程序向远程php文件发送POST请求,以便将base64编码数据保存到数据库中。当我传递POST数据时,我可以看到发送了post参数,但是当我从php文件打印响应时,它是空白的。

我试过这段代码:

controller.js

$http.post("someurl", {data: {"data333": 'peter'}});

当我从php打印$_POST$_REQUEST时,它是一个空白数组,但是从我的控制台我可以看到参数是用json {data: {"data333": 'peter'}}传递的。

我已在客户端和服务器中允许跨域。

我也尝试过标准的ajax方式:

$http.defaults.headers.post["Content-Type"] = 'application/x-www-form-urlencoded; charset=UTF-8';
$http({
        method : 'POST',
        url : 'someurl/',
        headers: {
            'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
        }, 
data : {"key": "value"}
})

有人可以帮我传递数据吗?

4 个答案:

答案 0 :(得分:6)

将数据传递到服务器的用户对象。希望它对你有帮助

myobject = { email: user.email,password:user.password };        
Object.toparams = function ObjecttoParams(obj) 
{
  var p = [];
  for (var key in obj) 
  {
    p.push(key + '=' + encodeURIComponent(obj[key]));
  }
  return p.join('&');
};

var req = 
{
    method: 'POST',
    url: "API-CALLING-URL",
    data: Object.toparams(myobject),
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}

$http(req).
success(function(data, status, headers, config) 
{
    //success
}).
error(function(data, status, headers, config) 
{
    //error
});

答案 1 :(得分:0)

正如angularjs-http-post-does-not-send-data中所述,这可能是使用JSON的AngularJS和期望表单数据的PHP之间的问题。

One answer是服务器端/ PHP:

  

你可以使用:

$params = json_decode(file_get_contents('php://input'),true);
     

从AngularJS POST访问PHP中的数组。

The accepted answer告诉您如何将AngularJS数据转换为标准的帖子请求。这很冗长。 (JSON数组到POST字符串等)

答案 2 :(得分:0)

我刚才遇到了这个问题。在PHP api中包含这些头文节省了我的一天。

if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

    exit(0);
}

查看我的问题here

的详细信息

答案 3 :(得分:0)

试试这个它应该有效,确保你在控制器中定义$ httpParamSerializerJQLike并且你很高兴,

   .controller('myCtrl', function($http, $httpParamSerializerJQLike) {
  $http({
   method: 'POST',
   url: baseUrl,
   data: $httpParamSerializerJQLike({
    "user":{
    "email":"wahxxx@gmail.com",
    "password":"123456"
  }
  }),
     headers:
    {'Content-Type': 'application/x-www-form-urlencoded'},

})})