$http - Angular发送POST参数并从PHP获取JSON

4

我刚开始学习Angular,对使用$http更是一窍不通。以下是我无法理解的:

  • 如何使用$http发送post请求(需要传递给PHP的必要参数)
  • 如何获得该请求的JSON响应

目前我已经尝试了以下代码:

$http调用:

var deferred = $q.defer();
var parametres = $.param({ nomWS: ws, servidor: ip, query: param, idCamping: dadesCamping[0], forceRenew: renew});       

var url = './api/functions.php?function=callWS_JSON'; 

$http({
    method: 'POST',
    url: url,
    data: parametres,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function(data) {            
    console.log('success');
    deferred.resolve(data);
}); 

接收调用的PHP代码将使用通过 $_POST[] 发送的参数检索内容,并使用以下方式获取JSON:

$fileContents = file_get_contents($url);        
echo $fileContents;

如果我在PHP脚本中手动设置参数,则会输出有效的JSON字符串,但是当我使用echo命令将其输出以便在我的JavaScript(Angular)代码中检索时,我会在Chrome控制台中收到以下错误:

SyntaxError: Unexpected token &
at Object.parse (native)
at Vb (http://domain/lib/angular/angular.js:14:208)
at e.defaults.transformResponse (http://domain/lib/angular/angular.js:64:454)
at http://domain/lib/angular/angular.js:64:215
at Array.forEach (native)
at r (http://domain/lib/angular/angular.js:7:280)
at pc (http://domain/lib/angular/angular.js:64:197)
at c (http://domain/lib/angular/angular.js:65:400)
at C (http://domain/lib/angular/angular.js:94:187)
at http://domain/lib/angular/angular.js:95:350

如果在内容的echo之前我输出了一些东西,我就不会收到错误信息,控制台会输出以下内容:

test
{"clientesPresentes": {"cliente":...

我认为出现了“SyntaxError: Unexpected token &”的错误是由于输出引起的。而且我非常确定问题与标题和内容类型有关。尝试查找参数以执行post调用并获得json内容作为答案,但我没有成功找到。所以任何帮助都将不胜感激。

提前致谢

附注:我尝试在我的php文件中设置header('Content-type: application/json');,但我仍然收到相同的SyntaxError: Unexpected token &错误。

提前致谢!


1
引号被转换为HTML实体,这当然不是有效的数据(更不用说正确的JSON格式了)。在对其进行JSON编码之前,请检查您的数据对象的PHP构造。 - alou
2个回答

0

你的 JSON 文件中可能有未转义的字符串。


0

参数从哪里来?

我是这样做的。

var $scope.someData = {
   'param1': 12,
   'param2': 33
};

//someData var can also be set inside a form

<input type="text" ng-model="somedata.param1" >

//post and get available
$http.post('url.php' , $scope.someData)
    .success(function(res){
      ;
             })
    .error(function(error){
      ;
    });

在 PHP 文件中以这种方式获取变量

$data = file_get_contents("php://input");
echo $data->param1;

问题不在于获取我的PHP脚本参数,这个工作正常。问题在于将JSON字符串返回给$http调用,这就是一切出错的地方。更准确地说,我试图输出的字符串已经是JSON格式的,并且我只是使用echo来输出它。我认为问题就在那里,我尝试使用json_encode等方法仍然失败。 - Albert Prats

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接