2013-12-11 2 views
2
jQuery("#" + msgSubject).autocomplete({ 
     source: function (request, response) { 
      jQuery.ajax({ 
       url: inboxControl.systemParams.allTemplateData + '/' + request.term + inboxControl.systemParams.API_EXTENSION, 
       dataType: "json", 
       async: false, 
       contentType: 'application/json; charset=utf-8', 

       error: function (jq, status, message) { 
        //alert('A jQuery error has occurred. Status: ' + status + ' - Message: ' + message); 
       }, 
       success: function (data) { 

        if (data.results) { 
         response(data.results.templates); 
        } else { 

         response(""); 
        } 

       } 
      }); 
     }, 
     minLength: 1 

    }); 

Вот мой код, я хочу отключить вызов ajax, если нет результата для введенного текста, в этом случае я хочу найти слово «Индия», если я наберу «я», он сделает вызов ajax и найдите слово с «I», предположим, что результат равен null, но если я наберу «n» второй буквой, он сделает ajax-вызов с «In», я хочу остановить этот второй вызов ajax, если нет ответ на первый запросКак отключить jquery ajax- auto complete, если нет результата?

ответ

1

Вы можете добавить флаг, а затем условно сделать AJAX запрос, основанный на значении указанного флага:

var has_match = true; 
jQuery("#" + msgSubject).autocomplete({ 
    source: function (request, response) {   
     if(has_match) { 
      jQuery.ajax({ 
       url: inboxControl.systemParams.allTemplateData + '/' + request.term + inboxControl.systemParams.API_EXTENSION, 
       dataType: "json", 
       async: false, 
       contentType: 'application/json; charset=utf-8', 

       error: function (jq, status, message) { 
        //alert('A jQuery error has occurred. Status: ' + status + ' - Message: ' + message); 
       }, 
       success: function (data) { 

        if (data.results) { 
         response(data.results.templates); 
        } else { 
         has_match = false; 
        } 

       } 
      }); 
     } 
    }, 
    minLength: 1 

}); 
+0

Спасибо за ответ .. спасибо очень много. .its perfect ... :) –

+0

Рад, что это сработало для вас :) –

+0

Теперь я нашел одну новую проблему в этом, предположим, что я ввел слово «INDIE» вместо «INDIA», он вернет null, и он не будет называть ajax снова, но если я удалю букву «E» из «INDIE», как «INDI», это не даст результат, у Becaus «has_match» есть значение false, «Как я могу решить эту проблему»? :( –

0
this.msgSubjectClick = function() { 
     jQuery("." + preparams.displaySettings.msgSubjectClass).click(function() { 

      var msgSubject = jQuery(this).attr('id'); 

      if(msgSubject=="patientSubject") 
      { 
       var subjectID=preParams.displaySettings.patientSubjectId; 
      }else 
      { 
       var ret = msgSubject.split("_"); 
       var str1 = ret[0]; 
       var str2 = ret[1]; 
       var subjectID=preParams.displaySettings.subjectID+str2; 
      } 

      var has_match = true; 
      inboxControl.has_match=has_match; 
      jQuery("#" + msgSubject).autocomplete({ 
       source: function (request, response) { 
       if(inboxControl.has_match) { 
        jQuery.ajax({ 
         url: inboxControl.systemParams.allTemplateData + '/' + request.term + inboxControl.systemParams.API_EXTENSION, 
         dataType: "json", 
         async: false, 
         contentType: 'application/json; charset=utf-8', 
         beforeSend: function (xhr) { 
          xhr.setRequestHeader(preParams.API_KEY, connSysParams.apiSecretKey); 
         }, 
         error: function (jq, status, message) { 
          //alert('A jQuery error has occurred. Status: ' + status + ' - Message: ' + message); 
         }, 
         success: function (data) { 

          if (data.results) { 
           response(data.results.templates); 
          } else { 

           inboxControl.has_match = false;        
           jQuery("#" +subjectID).val(""); 
           response(""); 
          } 

         } 
        }); 
        } 
       }, 
       minLength: 1, 
       select: function(event, ui) { 

       jQuery("#" +subjectID).val(ui.item.id); 
      }, 


      }); 


     }).keypress(function(event) { 

     var keycode = (event.keyCode ? event.keyCode : event.which); 

      if(keycode == '8') { 

        inboxControl.has_match = true; 
      } 

     }); 
    }; 

haii..i исправил эту проблему с кодом ключа в jquery, если мы нажмем обратно пространство, оно сбросит значение has_match ... Спасибо ...