当前位置: 首页 > 面试题库 >

如何自定义设置angularjs jsonp回调名称?

金昂熙
2023-03-14
问题内容

我必须通过angularjs从某些网站获取json数据。我已经按照下面的链接正确地完成了所有操作。

我的问题是api不允许回调参数具有除字母,数字和_之外的任何字符。而且由于angular用’angular.callbacks._0’之类的东西替换了JSON_CALLBACK,所以不允许使用它。

如何自定义为angularjs设置此值?

谢谢


问题答案:

回调名称在此处为硬编码httpBackend.js#L55,因此您无法对其进行配置。

但是,您可以编写一个HTTP拦截器来解决此问题,如下所示:

.factory('jsonpInterceptor', function($timeout, $window, $q) {
  return {
    'request': function(config) {
      if (config.method === 'JSONP') {
        var callbackId = angular.callbacks.counter.toString(36);
        config.callbackName = 'angular_callbacks_' + callbackId;
        config.url = config.url.replace('JSON_CALLBACK', config.callbackName);

        $timeout(function() {
          $window[config.callbackName] = angular.callbacks['_' + callbackId];
        }, 0, false);
      }

      return config;
    },

    'response': function(response) {
      var config = response.config;
      if (config.method === 'JSONP') {
        delete $window[config.callbackName]; // cleanup
      }

      return response;
    },

    'responseError': function(rejection) {
      var config = rejection.config;
      if (config.method === 'JSONP') {
        delete $window[config.callbackName]; // cleanup
      }

      return $q.reject(rejection);
    }
  };
})

柱塞示例: http

://plnkr.co/edit/S5K46izpIxHat3gLqvu7?p=preview

希望这可以帮助。



 类似资料:
  • 我正在使用MPAndroidChart显示一个相对简单的条形图。 有2件事我需要设置,我不知道如何自定义: > 我需要为每个条添加文本,而不是简单的值,每个条本身也有样式。 在每个条的顶部,我需要放置各种类型的可绘制材料来覆盖它的宽度(例如一个条中高度为2dp的蓝色,或另一个条上高度相同的黄色渐变)。 下面是我需要做的一个演示: > 我知道我也可以通过使用添加图标,但这似乎不适用于应该使用整个条形

  • 我想将我的谷歌应用程序域上所有用户的签名设置为他们的姓名和职务。通过研究,我发现实现这一点的唯一自由方式是使用Gmail API。我只需使用网站上的快速入门指南,就可以获得该域名上所有用户的列表(包括所需信息、我想要设置签名的电子邮件地址、姓名、职务)https://developers.google.com/admin-sdk/directory/v1/quickstart/js. 在listU

  • 问题内容: 我正在使用Spring 3.1,并且想使用新的缓存功能。然后,我尝试: 但是我没有找到配置自定义KeyGenerator的方法。任何想法? 问题答案: 好的,我只是找到一种方法来做… 如您所见,我使用AnnotationDrivenCacheBeanDefinitionParser,将配置放入xml中,并且可以::完成! 编辑: 对于Spring> 3.2,可以使用实现CachingC

  • 我正在研究一个项目,其中上下文和会话由ThreadLocal使用ThreadPoolExecutor安全地管理(信息从线程传递到ThreadPoolExecutor内部的另一个线程)。 我们有: ThreadPoolExecutor:它实现beforeExecute和afterExecute方法行为,以确保信息从线程传递到另一个线程,并在afterExecutre方法中清除线程上下文。 Threa

  • 我通过Java Admin API使用Google的Firebase存储在Spring Boot应用程序中存储文件。出于安全考虑,我为每个客户组织创建了一个单独的存储桶。由于我经常使用我的测试环境,所以我经常删除和创建这些存储桶。我在找人帮忙把这些水桶更快地装进火力点。 null null

  • 我正在使用jQuery,我有一个函数作为事件回调,所以在这个函数中,“this”代表捕获事件的对象。然而,有一个实例,我想从另一个函数显式调用函数——在这种情况下,我如何在函数中设置“this”等于什么? 例如: