gpt4 book ai didi

javascript - Angular jsonp回调只执行一次

转载 作者:行者123 更新时间:2023-11-29 21:39:35 25 4
gpt4 key购买 nike

配置

(function() {

angular.module('plunker', ['ngRoute']);

angular.module('plunker').config(['$routeProvider', moduleConfig]);

function moduleConfig($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: 'home.html', //url of the template
controller: 'HomeCtrl', //name of the controller
controllerAs: 'hCtrl' //how it should be referred in the template
})
.when('/profile', {
templateUrl: 'profile.html', //url of the template
controller: 'ProfileCtrl', //name of the controller
controllerAs: 'pCtrl' //how it should be referred in the template
})
.otherwise({
redirectTo: '/home'
});
}


//controllers should be in their own .js files
angular.module('plunker').controller('HomeCtrl', HomeCtrl);
angular.module('plunker').controller('ProfileCtrl',['myservice', ProfileCtrl]);

function HomeCtrl() {
var hCtrl = this;
alert('HomeCtrl');
}

function ProfileCtrl(myservice) {

var pCtrl = this;
myservice.retrive(function(data){
alert('profile');
});
}

})();

我的服务

(function(){

angular.module('plunker')
.factory('myservice',myservice);

myservice.$inject=['$http'];

function myservice($http) {

var factory={
retrive:retrive
};

return factory;

function retrive(callback){

var url = 'test.json';
var params = {
callback: 'angular.callbacks._0'
};

$http.jsonp(url, {params: params}).then(callback);
}
}


})();

我为特定页面编写了这个 Controller 和服务,比方说“/profile”。配置文件 Controller 使用具有 JSONP 请求的服务。当我转到该页面(“/profile”)时,一切正常,JSONP 回调执行。但是,当我在“/profile”之后转到“/index”并再次返回到“/profile”时,JSONP 调用会触发,但 Controller 中的回调不会执行。有人能找出错误吗

plnkr 代码 http://plnkr.co/edit/fswywkpsH6xl5XU0YplK?p=preview

在这个plnkr中,配置文件 Controller 中的回调只执行一次

最佳答案

问题是 angular 会在内部增加 jsonp 回调值作为跟踪机制

您必须使用记录的查询字符串 ?callback=JSON_CALLBACK

JSON_CALLBACK 只是一个占位符,$http 将在内部用以下值替换:

angular.callbacks._0
angular.callbacks._1
angular.callbacks._2

你的实现的问题是你总是返回 angular.callbacks._0() 所以下一个期望 angular.callbacks._1() 的调用没有收到该值,因此将拒绝请求

将您的服务方式更改为:

  function retrive(callback){

var url = 'test.json';
var params = {
callback: 'JSON_CALLBACK'
};

$http.jsonp(url, {params: params}).then(callback ).catch(function(err){
console.log(err)
});
}

在您的演示中,您会看到 err.status 在第二次请求时为 404

DEMO

关于javascript - Angular jsonp回调只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com