【问题标题】:jQuery AJAX fires early with current page datajQuery AJAX 使用当前页面数据提前触发
【发布时间】:2013-04-08 01:27:11
【问题描述】:

我一直在阅读 jQuery 的延迟方法,并试图在 AJAX 调用上实现它们。

我正在尝试的是监听对元素 (.slideLink) 的点击,获取相应 href 值的内容,然后根据结果记录结果或记录错误。

问题是,当前页面的内容会在页面加载后立即记录下来。点击.slideLink 什么都不做。

这是我目前所拥有的:

function getDetails(val){
    return jQ.get(val);
};

// click handler
jQ('#slides').on('click', '.slideLink', function(e){
    e.preventDefault();
    var addy = jQ(this).attr("href");
    getDetails(addy);
});

jQ.when( getDetails() )
    .done(function(results) {
        console.log(results);
    })
    .fail(function() {
        console.log( 'It doesn\'t work... :(' );
    });

显然我误解了一个基本原则,但我是通过谷歌绘制空白。

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    页面加载后,您会立即触发 getDetails()。此外,每次执行 getDetails() 时都会触发一个单独的请求并返回一个新的 deferred。试试这个:

    function getDetails(val){
        return jQ.get(val);
    }
    
    // click handler
    jQ('#slides').on('click', '.slideLink', function(e){
        e.preventDefault();
        var addy = jQ(this).attr("href");
        getDetails(addy).done(function(results) {
            console.log(results);
        })
        .fail(function() {
            console.log( 'It doesn\'t work... :(' );
        });;
    });
    

    【讨论】:

    • 谢谢你——太完美了!我猜测when() 事件在页面加载时触发getDetails 是否正确?
    【解决方案2】:

    看起来(from what I read in the docs) jQ.when( getDetails() ) 将在页面加载时立即运行您的函数。

    使用ajax() 而不是get() 可能会更好,这样您就可以利用done 和fail 回调属性。

    function getDetails( val ) {
        $.ajax({
            type: "GET",
            url: val,
            data: (yourdata),
            success : function(){},
            error : function(){}
        })
    }
    

    此外,如果您愿意,您可以直接在.slideLink 上调用click() 方法。

    jQ('.slideLink').click(function(e) {
        e.preventDefault();
        var addy = jQ(this).attr("href");
        getDetails(addy);
    });
    

    【讨论】:

    • 感谢您的提示:ajax() - 我之前没有遇到任何提到它会更合适的信息。
    • get() 肯定有可用的回调选项,但 ajax() 方法将它们直接内置,无需链接。 get() 只是GET 对ajax() 方法的具体实现。
    • 理想情况下,我希望将回调分开,因为逻辑可能会在其他地方使用。我还能用ajax() 做这个吗?
    • 查看设置列表下的context portion here。
    猜你喜欢
    • 2014-05-25
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多