2014-02-16 2 views
2

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

$("#selector").on("keyup", function(e) { 
    if (e.which === 188) { 

     var search = $(this).val(); 

     function searchTag() { 
      return $.ajax({ 
       cache:  false, 
       url:  url, 
       dataType: "json", 
       type:  "post", 
       data:  {search: search} 
      });    
     } 

     searchTag().done(function(data) { 
      //Success 
     }); 
    } 
}); 

Я хочу, чтобы повторно использовать вызов AJAX как часть другого события слушатель позже в моем коде:

$("body").on("click", ".tag", function() { 
    searchTag(); 
}); 

без перезаписи весь вызов, как сделать функцию независимой, так что он может быть использован в обоих сценариях?

+1

Тогда почему бы вам не переместить функцию searchTag за пределами события «keyup» (и сделать поиск var глобальным и применить значение только к keyup)? – drip

+0

@drip Я бы хотел избежать глобальных переменных, если смогу. – Ryan

+1

Затем заверните код в самоназывающую анонимную функцию ... – drip

ответ

6

Переместить функцию вне:

function searchTag(data) { 
    var url = "yoururl"; 
    return $.ajax({ 
     cache:  false, 
     url:  url, 
     dataType: "json", 
     type:  "post", 
     data:  data 
    });    
} 

$("#selector").on("keyup", function(e) { 
    if (e.which === 188) { 

     var search = {search: $(this).val()}; 


     searchTag(search).done(function(data) { 
      //Success 
     }); 
    } 
}); 

$("body").on("click", ".tag", function() { 
    searchTag({}); 
}); 
+0

Это работало как удовольствие, спасибо. – Ryan

+0

Также столкнулся с той же проблемой, это отлично работает для меня – William

0

удалить функцию от события, а также добавить в качестве входных данных значение поиска и URL в качестве входных данных:

function searchTag(searchVal, url) { 
      return $.ajax({ 
       cache:  false, 
       url:  url, 
       dataType: "json", 
       type:  "post", 
       data:  {search: searchVal} 
      });    
     } 

$("body").on("click", ".tag", function() { 
    var searchVal = $(this).val(); 
    var url = document.URL; //use any url here 
    searchTag(searchVal, url); 
}); 

вы можете даже использовать функцию обратного вызова:

function searchTag(searchVal, url, callbck) { 
      return $.ajax({ 
       cache:  false, 
       url:  url, 
       dataType: "json", 
       type:  "post", 
       data:  {search: searchVal} 
      }).done(function(){ 
       callbck(); 
      });    
     } 

$("body").on("click", ".tag", function() { 
    var searchVal = $(this).val(); 
    var url = document.URL; //use any url here 
    searchTag(searchVal, url, function(){ 
     //do something here.. 
    }); 
}); 
0

Об этом:

///tag -> tag to search 
///cb -> callback to executed on success 
var searchTag = function(tag, cb) { 
    var url = "http://example.com"; 
    var request = $.ajax({ 
     cache:  false, 
     url:  url, 
     dataType: "json", 
     type:  "post", 
     data:  {search: tag} 
    });   
    request.done(cb); 
} 

$("#selector").on("keyup", function(e) { 
    if (e.which === 188) { 
     var search = $(this).val(); 
     searchTag(search, function(data) { 
      //Success 
     }); 
    } 
}); 

$("body").on("click", ".tag", function() { 
    //I don't actually know where the tag to search is stored 
    var search = $(this).html(); 
    searchTag(search); 
}); 
Смежные вопросы