Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌地理编码器和jQuery_Jquery_Jquery Deferred_Google Geocoder - Fatal编程技术网

谷歌地理编码器和jQuery

谷歌地理编码器和jQuery,jquery,jquery-deferred,google-geocoder,Jquery,Jquery Deferred,Google Geocoder,我想知道,是否有办法让jQuery推迟与Google Geocoder的合作。我试过这样的方法: // ... _geocoder: function( address ) { if ( !this.props.geocoder ) { this.props.geocoder = new google.maps.Geocoder(); } var deferred = $.Deferred(), geocoder;

我想知道,是否有办法让jQuery推迟与Google Geocoder的合作。我试过这样的方法:

// ...

_geocoder: function( address ) {
    if ( !this.props.geocoder ) {
        this.props.geocoder = new google.maps.Geocoder();
    }

    var deferred = $.Deferred(),
        geocoder;           

    geocoder = this.props.geocoder.geocode( { 'address': address }, function( results, status ) {
        if ( status === google.maps.GeocoderStatus.OK ) {
            deferred.resolve({
                lat: results[ 0 ].geometry.location.k,
                lng: results[ 0 ].geometry.location.A
            });
        } else {
            deferred.reject();
        }

        return deferred.promise();
    });

    $.when( geocoder() ).then(
        function( data ) {
            alert( status );
        },
        function() {
            alert( "Defer rejected" );
        }
    );
},


// ...
但是google.maps.Geocoder不会返回jQuery延迟对象,因此此代码无法按预期工作。还有别的办法吗?
我不确定是否延期退货;或者,因为我看了一些代码示例,它们只是使用return-deferred;。有什么不同吗?

我会这样做:

// ...
_geocoder: function(address) {
    var geocoder = this.props.geocoder;
    if (!geocoder) {
        geocoder = this.props.geocoder = new google.maps.Geocoder();
    }
    return $.Deferred(function(dfrd) {
        geocoder.geocode({'address': address}, function(results, status) {
            if(status === google.maps.GeocoderStatus.OK) {
                dfrd.resolve(results[0]);
            } else {
                dfrd.reject(new Error(status));
            }
        });
    }).promise();
},
// ...
注意:通过使用整个results[0]对象解析Deferred,承诺链中就可以获得更多潜在可用的数据。看

测试如下:

yourNamespace._geocoder('some address').then(function(result) {
    console.dir(result.geometry.location);
}, function(err) {
    console.error(err);
});