Я пытаюсь реализовать настраиваемый расширенный поиск Magento, используя jQuery и Ajax.Поиск работает примерно так:1) Есть 2/3 варианта выбора размера2) 6 вариантов, чтобы сузить результат поиска3) текстовое поле для ввода ключевых слов и т. Д.
Нет кнопки отправки, это означает, что поиск начинается, когда пользователь нажимает на любой размер и / или Опции или вводит более 3 символов в текстовое поле поиска, начинается поиск, на сервер отправляется запрос ajax.Если пользователь нажимает на другую опцию или, скажем, вводит другой символ, я использую, чтобы прервать предыдущий поиск с помощью search_request.abort()
и установить предыдущий поиск на ноль.При поиске в первый раз, он работает нормально, поиск возвращает результат, и если результат не найден, отображается правильное сообщение. Но после нескольких запросов он начинает давать сбой.Например, если я нажимаю на опции в короткий промежуток времени (я имею в виду, поиск часто запускается)).Иногда происходит сбой безо всякой причины, а иногда и сбой, и когда я нажимаю на ту же опцию пару секунд спустя, отображаются результаты.Иногда, когда поиск не удается или нет результата.В области результатов отображается неполное сообщение, например: Где, как должно выглядеть:
Поиск при получении результата: Поиск при ошибке Мой вопрос: 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>