javascript - 具有不同参数的可重用 Ajax 调用

标签 javascript jquery ajax

我正在开发一些软件,可以对 Web API 进行 ajax 调用并返回一些数据。完成大部分工作后,我将回过头看看是否可以重构任何代码。由此我意识到,我进行了多个 ajax 调用,除了传递给它们的参数之外,这些调用具有相同的功能。考虑到这一点,我想将 ajax 调用重构为可重用的函数或组件,然后我可以为每个调用传递不同的参数,从而显着减少代码量。这是我创建的 ajax 调用:

function AjaxCall (ajaxUrl, ajaxData){
        return $.ajax({
            type: "GET",
            url: ajaxUrl,
            data: {
                ajaxData: ajaxData
            },
            dataType: 'JSON'
        });
    }

后来在我的代码中我调用了这个函数......

var brandId = $('#brandDropdownList option:selected').prop('id');
var ProductUrl = "http://localhost:54442/api/products/GetProducts";

var getProducts =  AjaxCall(ProductUrl, brandId);

getProducts.done(function(data) {
            $('#productDropdownList').html('').append('<option id="-1" disabled selected="selected">Please Select a Product...</option>');
            $.each(data, function(key, val) {
                $('#productDropdownList').append('<option id="' + val.productId + '">' + val.productName + '</option>');
            })
        })

在此,我从 UI 获取字段的 ID,并将其存储在名为 BrandId 的变量中。然后我设置要使用的 ajax 调用的 URL。然后,我调用函数 AjaxCall,传入 ProductUrl 和 BrandId。 getProduct.done 是成功的,我将数据附加到下拉列表中,但这与问题的上下文相关。

基本上我的问题是,在可重用组件中我使用了ajaxData,我需要ajaxCall来使用传入的参数brandId。所以我想要的实际 ajax 调用是

function AjaxCall (ajaxUrl, brandId){
        return $.ajax({
            type: "GET",
            url: ajaxUrl,
            data: {
                brandId: brandId
            },
            dataType: 'JSON'
        });

这会导致对以下 URL“http://localhost:54442/api/products/GetProducts?brandId=1”的请求,这正是我想要的。但每次我想要进行 ajax 调用时,变量brandId 都会更改为例如productId。那么有没有一种方法可以进行可重用的 ajax 调用,我可以传递不同的变量(brandId、ProductId 等),但也可以将 ajax 调用的数据部分中的变量更改为传入的变量,否则会产生结果网址如下:“http://localhost:54442/api/products/GetProducts?ajaxData=1”。

希望这是有道理的。提前致谢

最佳答案

在函数中,传递给 $.ajax()data: 属性应为 ajaxData:

function ajaxCall (ajaxUrl, ajaxData){
    return $.ajax({
        type: "GET",
        url: ajaxUrl,
        data: ajaxData,
        dataType: 'JSON'
    });
}

然后,当您调用它时,您可以传递带有您想要的任何参数的对象:

let promise = ajaxCall(someUrl, { brandId: brandId });

关于javascript - 具有不同参数的可重用 Ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60150486/

相关文章:

javascript - 多次传递单选按钮的值

javascript - 始终在 jQuery 自动完成中显示特定选择,即使它与输入不匹配

javascript - 删除在 iframe 中加载的页面的 div

jquery - 使用 Jquery 查找 XML 元素值

php - 如何在提交到 3rd 方服务器之前保存数据?

javascript - 当 "!"运算符与非 bool 变量一起使用时,它在 javascript 中意味着什么?

javascript - 如何在 React/Redux 应用程序中正确管理表单

javascript - 发出 ajax Post 请求时出现 403 Forbidden 错误

javascript - 为什么设计决定使用不同的支架?

javascript - 如何使 jQuery 对话框在 IE8 中的页面加载时不显示?