Magento jQuery Ajax поисковая проблема - PullRequest
1 голос
/ 30 ноября 2011

Я пытаюсь реализовать настраиваемый расширенный поиск Magento, используя jQuery и Ajax.Поиск работает примерно так: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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...