<!DOCTYPE html><html lang="en" ng-app="app"><head><meta charset="UTF-8"><title></title><script src="./angular.min.js"></script><script type="text/javascript">var app = angular.module("app", []);app.controller("appCtrl", ["$scope", function ($scope) {$http({method: "JSONP",url: "http://www.b.com/test.php?callback=JSON_CALLBACK",}).success(function (msg) {console.log(data);});//或者$http.jsonp("http://www.b.com/test.php?callback=JSON_CALLBACK").success(function (msg){console.log(msg);}); }]);</script></head><body></body></html>我们看到,这里是直接以jsonp的形式进行跨域请求的,其操作同jquery中对跨域的请求方式如出一辙。注意,我们的callback是固定的,即JSON_CALLBACK,尽量不要去做任何改动$callBack = isset($_GET["callback"]) ? $_GET["callback"] : DEFAULT_CALLBACK;exit($callBack."(".json_encode($data).")");我们再回来看看客户端console.log记录的结果

到此,也就是说我们跨域请求是成功的!
最后我们做个小总结,注意下其中的重点:
1.客户端跨域请求的url后追加的参数是?callback=JSON_CALLBACK,参数callback的值指定为JSON_CALLBACK,注意是大写,就是JSON_CALLBACK不要作任何改动,感觉这里是个不小的坑,?callback的值稍作改动,客户端就需要全局定义callback函数,而且还特么怎么再传给$scope处理?为了避免不必要的麻烦,这里建议就这么搞吧
2.再看服务端,服务端需要指定$callBack = $_GET["callback"];接收callback,而且你还会发现接收的callback不是我们客户端写的?callback的值,客户端指定JSON_CALLBACK应该是为了触发angularJs内部的机制