Jquery 多次重用AJAX函数
目前,我的AJAX调用是这样设置的,因此当检测到逗号键时,AJAX调用将触发:Jquery 多次重用AJAX函数,jquery,ajax,function,reusability,Jquery,Ajax,Function,Reusability,目前,我的AJAX调用是这样设置的,因此当检测到逗号键时,AJAX调用将触发: $("#selector").on("keyup", function(e) { if (e.which === 188) { var search = $(this).val(); function searchTag() { return $.ajax({ cache: false,
$("#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();
});
在不重写整个调用的情况下,如何使函数独立,以便在两种情况下都可以使用它?将函数移到外部:
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({});
});
从事件中删除该函数,并添加搜索值和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..
});
});
那么这个呢:
///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);
});
那么,为什么不将函数searchTag移到
keyup
事件之外(并将搜索变量设置为全局变量,并仅在keyup上应用该值)?@drip如果可以,我希望避免使用全局变量。然后将代码包装在自调用匿名函数中……或者您可以在$(document).ready()中声明该变量我相信你已经安排了你的活动范围。同样面对同样的问题,这对我来说是完美的