Angularjs jsonp请求

最近在研究Angularjs 1.6的跨域请求,尝试了很久,做个记录。

设置访问白名单

app.config(($sceDelegateProvider) => {
    ...
      $httpProvider.useApplyAsync(true);
      $sceDelegateProvider.resourceUrlWhitelist([
        'self',
        'http://localhost:8080/**'
      ]);

Client端的示例,用jsonCallbackParam来设置Callback。

var trustedUrl = $sce.trustAsResourceUrl(url);
$http.jsonp(trustedUrl, {jsonpCallbackParam: 'jsonpCallback'}).then(function(data) {
  console.log(data);
});

Rest Server端的示例。 注意这里entity中采用angular.callbacks._0包装返回结果,并且采用设置header("Access-Control-Allow-Origin", "*")

  @GET
  @Path("/login")
  @Consumes(MediaType.TEXT_PLAIN)
  @Produces(MediaType.TEXT_PLAIN)
  public Response login(@Context HttpServletRequest request) throws JSONException {
    return Response.ok().entity("angular.callbacks._0({\"token\":\"" + user.toString() + "\"})").header("Access-Control-Allow-Origin", "*").build();
  }

大功告成

你可能感兴趣的:(Angularjs jsonp请求)