在没有$ .ajax()的情况下在AJAX上设置超时

时间:2012-10-18 10:28:53

标签: javascript ajax load modal-dialog

我希望在加载数据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()
     {

     }  
   });

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

首先,围绕Ajax 异步(如setTimeout)这一事实进行了解决 - 将来会调用回调函数。

如何超时?你可以用

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

但它比这简单得多,jQuery已经为ajax() option object提供了timeout参数。

但是,这不可能使用load - 这里不返回jqXHR对象,而是返回当前的jQuery DOM选择。或者,您必须globally configure ajax,或者您不使用load并自行构建方法 - 这并不难,请参阅source