2
( 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

当我直接访问它时,我发送的 url 返回正确的数据。

4

3 回答 3

1

您是否尝试在不同的服务器上访问 JSON?如果是这样,您需要使用某种服务器端脚本将其加载到您自己的服务器上,并使用.getJSON. Google 购物搜索似乎不提供 JSON-P

如果您可以编写 PHP 页面或其他一些服务器端语言,那么获取和返回外部 JSON 是微不足道的,它现在将在您自己的服务器上,并且可以使用.getJSON.

于 2013-02-13T14:31:35.260 回答
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 跨域支持。

于 2013-02-13T14:33:57.830 回答
0

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

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

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

于 2013-02-13T14:36:03.827 回答