Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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
Javascript 如何创建动态ajax功能?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何创建动态ajax功能?

Javascript 如何创建动态ajax功能?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我使用了许多Ajax请求,如: $.ajax({ url: 'file.php', type: 'POST', async: true, data: {'data' : data}, success: function( data){ //Do Something. } }); 所以我想知道是否有可能创建一个动态函数,并向该函数传递一些参数,如(文件、类型、数据、success

我使用了许多Ajax请求,如:

$.ajax({
        url: 'file.php',
        type: 'POST',
        async: true,
        data: {'data' : data},
        success: function( data){
           //Do Something.
        }
});
所以我想知道是否有可能创建一个动态函数,并向该函数传递一些参数,如(文件、类型、数据、successFunction)

然后,每当我想要发出Ajax请求时,我就调用该函数并传递这些参数

比如:

function dynamicAjax(fileName , reqType , dataObj , succFunction){
    $.ajax({
        url: fileName,
        type: reqType,
        async: true,
        data: dataObj,
        success: function( data){
           //Run The Passed Function (succFunction).
        }
    });
}
然后我执行该函数:

dynamicAjax
('file.php' , 'POST' , {'data1': data1, 'data2': data2} , function(){
        //Do Something.
    }
);

这可能吗?

jQuery处理好了,你不是第一个想到这个主意的人

检查
$。获取
$。在jQuery中发布
方法

$.post( "test.php", { param: "value" }, ( data )=>{/*function*/}, "json");

$.get( "test.php", ( data )=>{/*function*/}, "json");

你99%都在那里。只需像这样执行回调函数

function dynamicAjax(fileName , reqType , dataObj , succFunction){
    $.ajax({
        url: fileName,
        type: reqType,
        async: true,
        data: dataObj,
        success: succFunction  // executes succFunction(data)
    });
}

我创建了一个动态ajax函数。请检查一下

function ajax(url, method = 'POST', data, callback)
        {
            $.ajax({
                url: url,
                method: method,
                data: data,        
                headers: {
                    "Accept": "application/json",
                    "Content-Type": "application/x-www-form-urlencoded;",
                },
                beforeSend: function ()
                {

                },
                error: function (response)
                {
                    switch (true) {
                        case typeof response.responseText !== 'undefined':
                            console.log(response.responseText);
                            break;
                        case response.statusText !== 'abort' && e.status === 0:
                            alert('Please check your internet connection');
                            break;
                        case response.statusText === 'abort':
                            break;
                        default:
                            console.error(response);
                    }
                },
                complete: function (response)
                {

                        callback(response);

                }
            }
            );
        }
要调用此函数,请使用以下代码

ajax('url here', 'GET', {id: id}, function(response){
  alert(response);
});

你试过了吗?你试过了吗?它应该很好用。话虽如此,您的
dynamicAjax
功能是否与仅使用
$.ajax
有什么不同?听起来他想删除应用程序中的一些可感知的锅炉板。键入更少,可感知的可读性增加。一个人可能希望有一个用于公共逻辑的包装器方法,原因有很多。
$.get
$.post
方法的存在不仅仅是包装通用逻辑。它们明确表达了程序员的意图。你们知道,他们并没有输入方法:“post”,实际上是想做一个get。通过使用该方法,他们完全知道自己想要什么。另外,如果您想让函数做一些额外的事情,您可以在以后更改函数,而不必修改每个ajax请求。错误。。。即使您坚持创建自己的函数-要执行作为参数传递的函数,您需要在函数体中调用它,所以parameter()@大卫。不,没有错。ajax调用的
success
参数在内部处理程序中执行,因此如果传递函数引用,则将使用success方法参数调用该函数。在你否认之前先试试;)@大卫,
succFunction
回调将在
ajax()方法中调用。@DavidC。
success:function(){}
success:succFunction
都将属性中的success值分配给函数引用。它们在逻辑上是相同的操作。在这两种情况下,ajax都会在需要运行时执行存储在success属性中的函数值。它的模式与
setTimeout(function(){otherMethod();},500)
的工作方式与
setTimeout(otherMethod,500)