首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在AngularJS中插入命令之前或阻止$http的JSONP自动解析?

如何在AngularJS中插入命令之前或阻止$http的JSONP自动解析?
EN

Stack Overflow用户
提问于 2013-06-27 09:04:14
回答 3查看 1.7K关注 0票数 16

似乎我发现的关于$http或angularjs的每个问题或解释都假定你可以修改你的请求的响应。我不能这样做,并且我得到的响应是错误的(根据AngularJS解析器)。它的格式是一致的,所以我可以在解析它之前修改纯文本来修复问题,但是响应拦截器和转换响应函数都发生在默认之后(基于内容类型?)解析。

JSONP编辑:问题在于我需要使用方法从另一个站点请求信息,但数据没有预期的JSONP回调,因此某些东西(我仍然不确定是浏览器基于内容还是AngularJS代码)抛出了语法错误。

新问题:有人知道解决这个问题的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-27 09:19:16

这是经过测试的,并且确实有效。如果你有任何进一步的问题,请告诉我。http://jsfiddle.net/moderndegree/Kn3Tc/

HTML

代码语言:javascript
复制
<div ng-app="myApp">
    <div ng-controller="myController">
        {{results.tada}}
    </div>
</div>

Javascript

代码语言:javascript
复制
angular.module('myApp', ['ngResource']).
factory('myService', function($http, $resource, $log){
    return $resource('/', {}, {
        get: {
            method: 'GET',
            // placed custom transform ahead of $http default
            transformRequest: [function(data, headersGetter){
                $log.info(data);
                $log.info(headersGetter());
            }].concat($http.defaults.transformRequest),
            // placed custom transform ahead of $http default
            transformResponse: [function (data, headersGetter) {
                $log.info(data);
                $log.info(headersGetter());
                data = {tada:"Check your console"};
                return data;
            }].concat($http.defaults.transformResponse)
        }
    });
}).
controller('myController', function(myService, $scope) {
    $scope.results = myService.get();
});

要使用更新,只需将方法切换为JSONP即可。您可以阅读有关ngResource here的更多信息。

票数 8
EN

Stack Overflow用户

发布于 2013-06-27 11:41:22

下面是angular文档所说的内容

要全局增强或覆盖默认转换,请修改$httpProvider.defaults.transformRequest和$httpProvider.defaults.transformResponse属性。这些属性默认情况下是一个转换函数数组,它允许您将新的转换函数推入或取消转换链。您还可以决定完全覆盖任何默认转换,方法是直接将转换函数分配给这些属性,而不使用数组包装。

基本上,您需要做的是配置$httpProvider

代码语言:javascript
复制
angular.module('myApp', [])
    .config(['$httpProvider', function ($httpProvider) {
//Define your transform function
//push your trasform function to the start of the array  $httpProvider.defaults.transformResponse
//Or replace the transformResponse array with a function or a new array of tranform functions.

}]);

现在,您实现的转换函数应该是数组中的第一个函数。因为那里已经有一个JSON转换函数字符串。

票数 1
EN

Stack Overflow用户

发布于 2016-09-01 02:24:38

Angular在1.5.8 https://github.com/angular/angular.js/blob/master/src/ng/jsonpCallbacks.js版本中添加了$jsonpCallbacks

这允许您修改回调函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17332922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档