Magento jQuery Ajax搜索问题

时间:2011-11-30 10:09:51

标签: ajax magento jquery


我正在尝试使用jQuery和Ajax实现自定义Magento高级搜索。
搜索工作如下:
1)有2/3选项可供选择尺寸
2)缩小搜索结果的6个选项
3)输入关键字等的文本框

没有提交按钮,这意味着,当用户点击任何大小和/或选项或在搜索文本框中输入超过3个字符时,搜索开始,搜索开始,ajax请求被发送到服务器。
如果用户点击另一个选项或者输入另一个字符,我会使用search_request.abort()中止之前的搜索并将之前的搜索设置为空。

当你第一次搜索时,它工作正常,搜索返回结果,如果没有找到结果,则显示正确的信息。但是,经过几次请求后,它开始失败。就像我在短时间间隔内点击选项(我的意思是,频繁搜索))。有时,它会在没有任何原因的情况下失败,有时会失败,当我在几秒钟后点击相同的选项时,它会显示结果。
有时候,搜索失败或没有结果。
它在结果区显示不完整的消息,如: incomplete no search result 应该是什么样子: complete no search result


在返回结果时搜索: Search Result 在失败时搜索 enter image description here

<小时/> 我的问题是:
1)你认为它可能会失败,因为过于频繁地提交了太多的请求?我的意思是有与 Magento设置有关的内容吗? 2)我该怎么做才能纠正这个问题?

<小时/> 这是jQuery代码:

<script type="text/javascript">
function search(textfield)
{
    j('#slides').html("<img src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB); ?>skin/frontend/luckybloke/luckybloke/images/ajax-loader.gif' class='no-results-found' style='width:100px !important; padding-top:10px !important;text-align:center;margin-left: 43%;' />");
    var form = j("#form-validate");
    var action = form.attr("action");
    var fieldAdded = Array();
    var searchData = '';
    var searchVal  = '';
    var sizeSelected = '';
    var searchArray = new Array();
    var searchCtr = 0;
    var tmp     = new Array();        
    if(typeof search_request =='object' && search_request!=null){
      search_request.abort();          
      search_request = null;
      j('#slides').html("<img src='<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB); ?>skin/frontend/luckybloke/luckybloke/images/ajax-loader.gif' class='no-results-found' style='width:100px !important; padding-top:10px !important;text-align:center;margin-left: 43%;' />");
    }

    j('.input-search').each(function(index,domEle){
        var eleID = "#"+j(domEle).attr("id");
        var curEle= j(domEle).attr("name");
        fieldAdded.push(curEle.replace('[]',''));
        ////consloe.log(eleID);            
        if((j(eleID).val()!='' || !jQuery.inArray(curEle,fieldAdded))&& eleID!='#name'){
            if(searchVal==''){
                searchVal=searchVal+j(eleID).val();
            }                


                if(searchData==''){
                    searchData = searchData+""+curEle+"="+j(eleID).val();
                }else{
                    searchData = searchData+"&"+curEle+"="+j(eleID).val();
                }
                searchArray[searchCtr] = j(eleID).val();
                searchCtr++;
            }
            //add description field to search query                
            tmp[curEle] = j(eleID).val();

        }
    });


    if(searchVal==''){

    }
    if(j("#name").val()=='brand, style, keyword'){ 
        var val = '';
    }else{
        val = j("#name").val();
    }  

    searchData = searchData+"&search_keywords="+val;        
    //toggleFields(sizeSelected, searchArray);
    search_request = j.ajax({
        type:'get',
        url:action,
        data:searchData, 
        cache: false,
        dataType:'html',
        success:searchComplete
    });
    return;
}


function searchComplete(responseText, statusText, xhr, $form)
{          
    var no_item_msg = 'No product found matching your search criteria.';
    if(statusText=='success'){
            var isFound = responseText.toString().search(new RegExp(/no items found/i)); 
            //alert(isFound+''+responseText.toString());                      
        if((isFound>0 || responseText.length == 0) && search_request ){             
            j("div#slides").html("<span class='no-results-found'>"+no_item_msg+"</span>");
        //    j("div#slides").html("<span class='no-results-found'>"+no_item_msg+"</span>");
            /*j("div#lb-product-list").block({message:no_item_msg});
            setTimeout('j("div#lb-product-list").unblock()', 2000);*/
        }else{           
            var dataToFill = j("div#lb-product-list");      
            var isFound = responseText.toString().search(new RegExp(/JUST_ONE/i));                
            if(isFound>=0){
                responseText = responseText.replace(/just_one/i,'');
            }else{
                j.getScript("<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB); ?>js/carousol.js", function() {});
            }
            dataToFill.html(j(responseText).children());                
            search_request = null;                
        }
        //reset the css attribute's position value, as ui blocking seems to be affecting positioning of elements are unblocking
        j("div#lb-product-list").css("position",'');
        return true;
    }
}
</script>

0 个答案:

没有答案