【问题标题】:how to access angularjs callback result jsonp如何访问angularjs回调结果jsonp
【发布时间】:2014-07-15 17:31:22
【问题描述】:

我有一个像这样的 url 的 WMS 查询。

http://giswebservices.massgis.state.ma.us/geoserver/wms?VERSION=1.1.1&REQUEST=GetFeatureInfo&LAYERS=massgis:GISDATA.ACECS_POLY&SRS=EPSG:26986&BBOX=11830.0,776202.9449152543,348201.0,961492.0550847457&WIDTH=708&HEIGHT=390&INFO_FORMAT=text/javascript&FEATURE_COUNT=10&QUERY_LAYERS=massgis:GISDATA.ACECS_POLY&X=120&Y=109&FORMAT&STYLES=&SERVICE=WMS

此网址返回 JSON 结果parseResponse( ...json...)

我想创建 angularjs $http jsonp 但没有成功。

function appCtrl($scope, $http){
    function parseResponse(data) {
        $scope.data = data
    } 

    var httpOptions = {
        url: "http://giswebservices.massgis.state.ma.us/geoserver/wms?VERSION=1.1.1&LAYERS=massgis:GISDATA.ACECS_POLY&SRS=EPSG:26986&BBOX=11830.0,776202.9449152543,348201.0,961492.0550847457&WIDTH=708&HEIGHT=390&INFO_FORMAT=text/javascript&FEATURE_COUNT=10&QUERY_LAYERS=massgis:GISDATA.ACECS_POLY&X=120&Y=109&FORMAT&STYLES=&SERVICE=WMS",
        method: "JSONP",
        params : {
            REQUEST: 'GetFeatureInfo',
        },
    };

    $http(httpOptions).
        success(function(data){
            console.log(data);
            $scope.data = data;
        }).
        error(function(data){
            console.log(data);
        });
}

这给出了错误“parseResponse is not defined”但我定义了该函数

【问题讨论】:

  • 您是否正在尝试做一个 http.get?或者我是如何解释的,试图 ping 一个服务器并返回一个 json?
  • 我认为您不应该将您的问题修改为一个全新的问题,否则我的回答没有意义。您可以回复并提出一个新问题吗?
  • 如果对您有帮助,您能否将答案标记为正确?

标签: javascript jquery json angularjs


【解决方案1】:

你可以尝试在params中设置format_options,因为angularjs默认的回调函数名是JSON_CALLBACK

var httpOptions = {
    url: "http://giswebservices.massgis.state.ma.us/geoserver/wms?VERSION=1.1.1&LAYERS=massgis:GISDATA.ACECS_POLY&SRS=EPSG:26986&BBOX=11830.0,776202.9449152543,348201.0,961492.0550847457&WIDTH=708&HEIGHT=390&INFO_FORMAT=text/javascript&FEATURE_COUNT=10&QUERY_LAYERS=massgis:GISDATA.ACECS_POLY&X=120&Y=109&FORMAT&STYLES=&SERVICE=WMS",
    method: "JSONP",
    params : {
        REQUEST: 'GetFeatureInfo',
        format_options: 'callback: JSON_CALLBACK'
    },
};

【讨论】:

    【解决方案2】:

    这里是如何使用 jsonp 访问 AngularJS 回调结果:

    http://jsfiddle.net/jCUSh/138/

    function WMSCtrl($scope, $http) {
        $scope.nums = [1,2,3]
        $scope.data = null;
        $scope.get_data = function() {
          var url2 = 'http://giswebservices.massgis.state.ma.us/geoserver/wms?VERSION=1.1.1&LAYERS=massgis:GISDATA.ACECS_POLY&SRS=EPSG:26986&BBOX=11830.0,776202.9449152543,348201.0,961492.0550847457&WIDTH=708&HEIGHT=390&INFO_FORMAT=text/javascript&FEATURE_COUNT=10&QUERY_LAYERS=massgis:GISDATA.ACECS_POLY&X=120&Y=109&FORMAT&STYLES=&SERVICE=WMS'
          $http.jsonp(url2, {params : {REQUEST: 'GetFeatureInfo'}});
        }
    
        window.parseResponse = function(data) {
          $scope.data = data
        }
    }
    

    我删除了 url 上的一个重要参数(即 REQUEST=GetFeatureInfo)并将其包含在 jsonp 函数调用的 params 参数中,以展示如何传递 params 参数的示例。

    【讨论】:

    • 如何将查询字符串分离为 json 参数并发送
    • 你为什么要定义window.parseResponse?
    • 实际上,这里有一篇文章展示了您如何在 jsonp 调用中指定参数 stackoverflow.com/questions/18676085/…
    • 我定义了 window.parseResponse 来从 JSON 回调中传递数据,因为它被包装在一个 parseResponse 函数中。我以为你只是想要 JSON?
    • 你的解决方案很棒,我试过这个jsfiddle.net/barteloma/Wqu68 但无法捕获回调并且成功函数不起作用
    猜你喜欢
    • 1970-01-01
    • 2014-01-27
    • 2010-11-23
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多