jquery插件无法使getJSON正常工作

时间:2013-02-13 14:16:39

标签: jquery ajax

( function( $ ) {                

    function CleanQueryString( query )
    {
        return encodeURI( query ); 
    };

    function ConcatData( settings )
    {                               
        settings.concatUrl = settings.googleUrl;
        settings.concatUrl = settings.concatUrl.replace( "{key}", settings.googleApiKey );
        settings.concatUrl = settings.concatUrl.replace( "{country}", settings.country );     
        settings.concatUrl = settings.concatUrl.replace( "{query}", settings.cleanQuery );  
    };

    $.fn.GoogleSearchResult = function( options ) {  

        var settings = $.extend( {
            query: null,
            googleApiKey: "myapikey",
            googleUrl: "https://www.googleapis.com/shopping/search/v1/public/products?key={key}&country={country}&q={query}&alt=json",
            concatUrl: "",
            country: "UK",
            cleanQuery: ""
        }, options);

        return this.each( function() {  
            if( settings.query )
            {   
                var $t = $(this);

                settings.cleanQuery = CleanQueryString( settings.query );
                ConcatData( settings );    
                alert( settings.concatUrl ); // This alerts the correct url and I've checked that it returns json

                $.getJSON( settings.concatUrl, function( data ) {  
                    alert("hi"); // This never alerts                    
                    $t.html( data );                
                });
            }

            return false;    
        } );     
    };  
} )( jQuery );

我无法让我的$ .getJSON工作..任何想法为什么可能没有返回任何东西:

https://developers.google.com/shopping-search/v1/getting_started

当我直接进入时,我发送的网址会返回正确的数据。

3 个答案:

答案 0 :(得分:1)

您是否尝试在其他服务器上访问JSON?如果是这样,您需要使用某种服务器端脚本在自己的服务器上加载它,并使用.getJSON访问它。 Google Shopping Search doesn't appear to offer JSON-P

如果您可以编写PHP页面或其他服务器端语言it's trivial to get and return the external JSON,它现在位于自己的服务器上,可以使用.getJSON轻松加载

答案 1 :(得分:0)

jQuery.support.cors = true;
$.getJSON( settings.concatUrl, function( data ) {  
    alert(data);                    
    $t.html( data );                
}).error(function(xhr, status, error) { alert("error" + status +" " + error); }) ;

可以使用此设置启用Jquery跨域支持。

答案 2 :(得分:0)

您需要使用JSONP从外部源传输数据。 Google API支持此功能,因此就您的代码而言,这就像将&callback=xyz附加到您的网址一样简单,其中xyz是外部服务器将您的代码包装在其中的一些功能。

  

https://www.googleapis.com/shopping/search/v1/public/products?key={key}&country={country}&q={query}&alt=json&callback=xyz

jQuery会自动查找名为?的回调,因此您可以使用callback=?或通过向您的AJAX请求参数添加jsonp: xyz来指定自定义名称。