1

我想在加载数据 2 秒后设置超时。我是 ajax 新手,所以请通过我的代码澄清...因为我已经看到很多(在 ajax 上设置超时)答案,但每个人都通过 $.ajax()。

我怎么能通过 .load() 做?有没有可能?

我的 AJAX 代码 1:

// Start of our new ajax code
        if (!url) {
            url = jQuery('#product_addtocart_form').attr('action');
        }
        url = url.replace("checkout/cart","ajax/index"); // New Code
        var data = jQuery('#product_addtocart_form').serialize();
        data += '&isAjax=1';
        jQuery('#ajax_loader').show();
        try {
            jQuery.ajax( {
                url : url,
                dataType : 'json',
                type : 'post',
                data : data,
                success : function(data) {
                    jQuery('#ajax_loader').hide();
                    parent.setAjaxData(data,true);
                }
            });
            jQuery("#productOptions").modal('hide');
        } catch (e) {
            //alert(e);
        }
        // End of our new ajax code

2:

// AJAX product options modal
$('.optionsTrigger').on('click', function() {
    var target, url;
    target = $(this).attr('data-target');
    url = $(this).attr('href');
    $(target).load(url, function(){
        $(target).modal({
            show: true
        });
    });
});
$('#productOptions').on('hidden', function() {
    $('#productOptions').html('<img src="<?php echo $this->getSkinUrl("img/loading.gif"); ?>" id="optionsLoading" />');

    window.setTimeout("Tick()", 2000);

    function Tick()
     {

     }  
   });
4

2 回答 2

2

jQuery 有可用的ajaxSetup()方法。您可以在那里将所有选项设置为正常ajax()方法,包括timeout选项。当您通过 调用 AJAX 请求时,设置的设置也应该可用load()

于 2012-10-18T10:37:18.060 回答
1

首先,让您了解 Ajax 是异步的(如)这一事实setTimeout——回调将在未来的某个时候被调用。

如何超时?你可以使用

var request = jQuery.ajax(…);
setTimeout(function() {
    request.abort();
}, 2000);
request.done(function callback(){ … });

但它比这简单得多,jQuery 已经为它的option objecttimeout提供了一个参数。ajax()

但是,这是不可能的load- 这里不是返回 jqXHR 对象,而是当前的 jQuery DOM-selection。要么,您必须全局配置 ajax,要么您自己不使用load和构建该方法 - 这并不难,请参阅源代码

于 2012-10-18T10:36:01.720 回答