JQuery Ajax查询在执行3次后停止工作

时间:2012-07-13 16:04:15

标签: jquery ajax

我试图寻找类似的问题,但没有一个与我所处的困境相匹配...... 所以,首先,对不起,如果我的搜索没有成功。

项目背景: 我正在和Joomla建立一个旅游指南网站! + SEBLOD + Youtheme Warp。 注册用户/度假村的所有者可以添加他们的业务以列出他们,但他们需要广告该位置。由于有许多州以及后来许多海滩要链接,因此想法是按地区过滤位置(5个地区,来自地区类别>州的SEBLOD / Joomla文章(来自州类别的SEBLOD / Joomla文章,通过SEBLOD相关文章字段到区域)>海滩(SEBLOD / Joomla内容类型,通过SEBLOD相关文章字段链接到州和地区),从而减少了选择中的列表选项。

我的问题是: 选择是从可以工作的JQuery / Ajax函数填充的,但在执行3之后,它将停止工作。

我在Firefox上使用Firebug(因为它在“离线”时运行,在localhost上运行)和WebDeveloper扩展。

我收到以下JS错误: 错误1 - 来自webdeveloper(似乎与Yootheme Warp相关):

Timestamp: 13/07/2012 12:55:45
Error: TypeError: $.onMediaQuery is not a function
Source File: http://localhost/viapraia2/templates/yoo_master/js/template.js
Line: 37

错误2 - 来自萤火虫((似乎与Yootheme Warp相关,但不确定是否与上述相同)

TypeError: $.onMediaQuery is not a function 
invalid: function() {

我不认为这些错误与我的问题有关,尽管Yootheme Warp警告要加载多个JQuery库。我检查了文件,扩展似乎是单独封装自己的,所以它们不应该冲突,但我不能确定。由于脚本有效几次,我认为它们与问题无关......

这就是我认为相关的JS:

/**
    * Check if RESORT select object exists and has value
    **/
    var resort = $j('#vp_related_resort');
    var resortValue = (resort.length <0) ? 0 : resort.val();
    var resortCatId = (isEmpty($j('#vp_resort_catid'))) ? 0 : $j('#vp_resort_catid').val();

    var arrKeys = ['region', 'state', 'related_beach','resort'];
    var varArr = [region, state, beach, resort];

    mySelects={
        'region':{'select':region,'value':regionValue,'catid':regionCatId},
        'state':{'select':state,'value':stateValue,'catid':stateCatId},
        'related_beach':{'select':beach,'value':beachValue,'catid':beachCatId},
        'resort':{'select':resort,'value':resortValue,'catid':resortCatId}
        };

    /**
    * Set AJAX request to retrieve STATES according to the REGION selected
    * Change the STATES select content according to the result
    **/   
    function _ajax(ajaxUrl,value,item,obj){
        var nUrl = (item.match(/beach/)) ? '&item=beach' : '&item=' + item;

        nUrl = ajaxUrl + nUrl;

        $j.ajax ({
            url: nUrl,
            contentType: "application/json;charset=UTF-8",
            success: function(data){
                if(data.length) {
                    $j.each(data,function(c,d){
                        var o = new Option();
                        var newTitle = d.title;
                        $j(o).html(newTitle).val(d.id);
                        obj.append(o);                       
                        //obj.val(value);
                    });
                }            
            },
            beforeSend: function(){
                obj.children("option:not(:first)").remove();
                obj.hide();
            },
            complete:function(){
                nUrl = ajaxUrl = '';
                obj.show();
            },
            dataType: 'json', 
        });


    }
    /**
    * Execute _ajax function when region SELECT changes
    **/
    region.change(function(){
        var aUrl = theUrl;
        if($j(this).val() > 0){
            var w = arrKeys.indexOf('region');
            var kArr = arrKeys;
            kArr.splice(w,1);
            var vArr = varArr;
            vArr.splice(w,1);
            aUrl = aUrl + 'region&regionSelectId=' + $j(this).val() + '&regionCatId=' + mySelects.region.catid + '&catid=';
            for(var i=0; i < kArr.length; i++){
                var v = 0;
                if(vArr[i].length > 0) {
                    v = aUrl + mySelects[kArr[i]].catid;
                    _ajax(v, mySelects[kArr[i]].catid,kArr[i],vArr[i]);
               }
            }
        }
    });

可以通过以user / testuser here身份登录进行测试,然后加载this form 如果您使用3个选项进行游戏,并且加载了Firebug,您会注意到前2次执行有效,但3只执行状态,留下海滩选择。我不知道从哪里开始寻找错误。

感谢您的时间!!

[更新] - [已解决] 在昨天花了好几个小时(并且失去了我的睡眠!!)和今天,我终于找到了问题。 这绝对是splice和indexOf方法的误用。 我将region.change函数替换为键和对象数组的循环,并且仅当循环项与select对象本身的处理值不同时才执行ajax调用。

以下是更新版本,如果有人关心:

/**
* Execute _ajax function when region SELECT changes
**/
region.change(function(){
    var aUrl = theUrl;
    var k = $j(this).attr('id').replace('vp_','');
    if($j(this).val() != 0){
        aUrl = aUrl + 'region&regionSelectId=' + $j(this).val() + '&regionCatId=' + mySelects.region.catid + '&catid=';
        for(var i=0; i < kArr.length; i++){
            var v = '';
            if(kArr[i] != k) {
                v = aUrl + mySelects[kArr[i]].catid;
                _ajax(v, mySelects[kArr[i]].catid,kArr[i],vArr[i]);
           }
        }
    }
});

0 个答案:

没有答案