Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 多次重用AJAX函数_Jquery_Ajax_Function_Reusability - Fatal编程技术网

Jquery 多次重用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,

目前,我的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();
});

在不重写整个调用的情况下,如何使函数独立,以便在两种情况下都可以使用它?

将函数移到外部:

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()中声明该变量我相信你已经安排了你的活动范围。同样面对同样的问题,这对我来说是完美的