AngularJS http.jsonp请求.then和.success函数不起作用

时间:2016-04-12 19:35:51

标签: javascript php angularjs laravel jsonp

我的客户端应用是一个angularJS应用程序。服务器由Laravel 5构建。

在客户端,我进行了一个jsonp CORS请求:

$http.jsonp("http://server.com/api?callback=JSON_CALLBACK")

在laravel服务器中,返回一个json数据:

return Response()->json($query);

然而,当我尝试

$http.jsonp("http://server.com/api?callback=JSON_CALLBACK")
.then(function(response){
    alert('success');
});

$http.jsonp("http://server.com/api?callback=JSON_CALLBACK")
.success(function(response){
    alert('success');
});

两种状态均为200 OK。但是不会出现任何警报。我试试

$http.jsonp("http://server.com/api?callback=JSON_CALLBACK")
.then(function(response){
    alert('success');
},function(error){
    alert('fail');
});

结果状态为200 OK但警报为" 失败"!我怎么解决这个问题?谢谢!

2 个答案:

答案 0 :(得分:1)

JSONP需要回调函数" JSON_CALLBACK"在服务器端。或者,您可以使用代理。 http://www.whateverorigin.org/

答案 1 :(得分:0)

Angular< $http.jsonp将请求查询字符串参数从callback=JSON_CALLBACK转换为callback=angular.callbacks._0

在Laravel的控制器中,您需要在响应字符串中添加前缀。

return $request->input('callback')."(".$query.")";

然后,角度应用程序将确认此响应并传递给.then.success函数。