jquery插件中的$ .ajax不更新变量

时间:2012-11-24 15:22:50

标签: ajax jquery jquery-plugins

小提琴:http://jsfiddle.net/gpTpK/

我遇到的问题是,当执行$ .ajax时,标题变量没有更新/更改,我知道ajax调用正在运行,因为我尝试更换行

title = $(xml).find("title").text();

console.log($(xml).find("title").text());

并且确实它确实返回了标题但是当使用原始线时,变量标题不会改变

我已经尝试过,它确实可以将ajax调用放在外面(function($){})(jQuery);

(function($) {
    $.fn.getPost = function(options) {
        var $this = $(this);
        var defaults = {
            method: "html",
            blogID: "",
            postID: "",
            done: null
        };
        var options = $.extend(defaults, options);
        var title;
        $.ajax({
            type: "GET",
            url: "http://www.blogger.com/feeds/724793682641096478/posts/default/3551136550258768001",
            dataType: "xml",
            dataType: 'jsonp',
            success: function(xml) {
                title = $(xml).find("title").text();
            }
        });
        return $this.each(function() {
            if (options.done) {
                options.done.call(undefined, title);
            }
        });
    };
})(jQuery);

我已经尝试了以下内容,我也尝试将ajax包装在一个函数中,例如getTitle(){ajax code here with return title;}

(function($) {
    $.fn.getPost = function(options) {
        var $this = $(this);
        var defaults = {
            method: "html",
            blogID: "",
            postID: "",
            done: null
        };
        var options = $.extend(defaults, options);
        var title;
        getAjax();
        return $this.each(function() {
            if (options.done) {
                options.done.call(undefined, title);
            }
        });

        function getAjax() {
            $.ajax({
                type: "GET",
                url: "http://www.blogger.com/feeds/724793682641096478/posts/default/3551136550258768001",
                dataType: "xml",
                dataType: 'jsonp',
                async: false,
                success: function(xml) {
                    title = $(xml).find("title").text();
                }
            });
        }
    };
})(jQuery);

1 个答案:

答案 0 :(得分:1)

抱歉,我花了很多时间试图弄清楚(我没有问过懒惰:P),不管这里有什么感兴趣的解决方案:)

(function($) {
    $.fn.getPost = function(options) {
        var $this = $(this);
        var defaults = {
            method: "html",
            done: null
        };
        var options = $.extend(defaults, options);
        var title;
        var sorf;
        $.ajax({
            type: "GET",
            url: "http://www.blogger.com/feeds/724793682641096478/posts/default/3551136550258768001",
            dataType: "xml",
            dataType: 'jsonp',
            success: function(xml) {
                title = $(xml).find("title").text();
                sorf = 1;
            },
            error: function(){
                sorf = 0;
            },
            complete: function() {
                returnvals(sorf);
            }
        });

        function returnvals(sorf) {
         if(sorf){
         //success
            return $this.each(function() {
                if (options.done) {
                    options.done.call(undefined, title);
                }
            });
         }else{// failure}
        }
    };
})(jQuery);