在返回this.each jquery插件之前,我的代码很糟糕

时间:2013-02-13 15:01:45

标签: javascript jquery ajax

( function( $ ) {              
    jQuery.support.cors = true;

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

    $.fn.GoogleSearchResult = function( options ) {  

        var settings = $.extend( {
            query: null,
            googleApiKey: "something",
            googleUrl: "https://www.googleapis.com/shopping/search/v1/public/",
            concatUrl: "",
            country: "UK",
            cleanQuery: ""
        }, options); 

        alert("im here"); // THIS ALERTS

        return this.each( function() {
            alert("q:" +settings.query); // THIS DOES NOT?  
            if( settings.query )
            {                                 
                alert(":" + settings.query);
                settings.cleanQuery = CleanQueryString( settings.query );
                $.ajax({       
                    dataType: "json", 
                    async: false,  
                    url: settings.googleUrl,       
                    data: {
                        key: settings.googleApiKey,
                        country: settings.country,
                        q: settings.cleanQuery,
                        alt: 'json'
                    },      
                    success: function( data ) {    
                        alert( data );
                        return data;           
                    },
                    error: function(xhr, status, error) { 
                        alert("error " + status + " " + error); 
                    }   
                });
            }  
        } );     
    };  
} )( jQuery );

在返回this.each jquery插件之前,我的代码很糟糕,任何想法为什么?

我打电话给:

$.fn.GoogleSearchResult( { 
     query: "the apple ipad"
} );

2 个答案:

答案 0 :(得分:1)

.each()函数迭代jQuery对象的内容,即它的上下文。在您的情况下,您根本没有上下文对象,因此.each()将不执行任何操作。

鉴于你的函数的性质,我不明白为什么它成为一个jQuery函数是有意义的。您可以将其直接挂在$对象上,如果您这样做,那么您根本不需要.each()

答案 1 :(得分:0)

这就是你打电话的方式。你需要在选择器上调用它而不是fn。