【问题标题】:JSONP not working in AngularJS as expectedJSONP 不能按预期在 AngularJS 中工作
【发布时间】:2014-09-22 11:52:33
【问题描述】:

我从 Angular 文档中获取的第一个注释 $scope.url 工作正常,同样我试图调用另一个公共 url,它给我返回响应但总是进入错误回调。

这两个网址都是公共领域的,所以请随意尝试。

                $scope.method = 'JSONP';
             // URL 1: Working
             // $scope.url = 'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero';

             // URL 2: Not working (Getting response with status 200OK but going to error callback)           
                $scope.url= 'http://apps.nlm.nih.gov/medlineplus/services/mpconnect_service.cfm?callback=JSON_CALLBACK&mainSearchCriteria.v.cs=2.16.840.1.113883.6.96&mainSearchCriteria.v.c=41381004&knowledgeResponseType=application/javascript';

                $scope.fetch = function() {
                    $scope.code = null;
                    $scope.response = null;

                    $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
                        success(function(data, status) {
                             console.log(data);
                             console.log(status);
                        }).
                        error(function(data, status) {
                            console.log(data);
                            console.log(status);
                        });
                };

【问题讨论】:

    标签: javascript angularjs jsonp


    【解决方案1】:

    出于某种原因,dots 正在从回调方法名称 http://apps.nlm.nih.gov/medlineplus/services/mpconnect_service.cfm?callback=angular.callbacks._0&mainSearchCriteria.v.cs=2.16.840.1.113883.6.96&mainSearchCriteria.v.c=41381004&knowledgeResponseType=application/javascript

    中剥离

    AngularJS 无法处理此响应,因为 Angular 想要调用 angular.callbacks.0

    一些开发背景

    var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
        function() {
            if (callbacks[callbackId].data) {
                completeRequest(callback, 200, callbacks[callbackId].data);
            } else {
                completeRequest(callback, status || -2);
            }
            callbacks[callbackId] = angular.noop;
    });
    

    每个包含JSON_CALLBACK 字符串的网址都将被angular.callbacks.{\D} 替换

    来源:AngularJS.js

    【讨论】:

    • 感谢@Krzysztof 确认响应不适合 Angular。 Web Service 不在我的控制之下,我会找到另一种调用它的方法,而不是使用 Angular。
    • 我找到了一个丑陋的解决方案。您可以使用 JSON_CALLBACK 以外的回调外部 api。而且(这是丑陋的部分)您必须创建与回调同名的全局方法。在该全局方法中,您可以处理响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2015-06-26
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多