如何在jQuery Ajax调用中动态传递数据参数(多个数据数组)

4

我有这段ajax代码:

return $.ajax({
        type: "POST",
        url: "somefile.php",
        cache:false,
        data: { "yfilter": $("#yearFilter").serializeArray(),
            "gfilter": $("#genreFilter").serializeArray() },
        dataType:"json",
        success: function(data){
            alert("success");
        }

这可以正常工作,但我需要动态传递数据参数。现在,我需要上述数据参数内容和单个字符串。
我应该如何动态传递它? / 如何将其存储在变量中并将其传递到 "data:" 字段中?
 { "yfilter": $("#yearFilter").serializeArray(),
    "gfilter": $("#genreFilter").serializeArray() }

我尝试使用JSON.stringify,但由于数据是一个数组,所以无法正常工作。

年份和类型的数组直接来自jQuery下拉菜单。可以通过其#id进行选择,如"$(“#yearFilter”)"。这是选择表单元素。

<select multiple="multiple" name="yearFilter[]" class="filterChange" id="yearFilter">

我在基础层面所需要的是:

var someData = "";


    if(...){
        someData = { "yfilter": $("#yearFilter").serializeArray(),
                "gfilter": $("#genreFilter").serializeArray() };
    }
    else if(...){
        someData = "sampleString";
    }

在Ajax调用中:

...
data: someData,
...

1
创建一个数组,如果不存在则发送“none”。 - StaticVariable
1
也不应该需要 traditional:false 选项。 - charlietfl
最后一条评论真的让问题变得混乱了吗?请明确详细地说明实际问题是什么,有哪些工作或需要发生的事情,以及什么正在或没有运作。 - charlietfl
你应该像你说的那样传递一个 JSON 对象。你能展示一下数据是什么吗?使用 json.stringify 应该可以。 - YardenST
好的,我想要将不同的数据传递给ajax调用中的"data:"。我想要传递的第一个选项是你在问题中看到的(流派和年份过滤器数组)。我想要传递的第二个选项是一个简单的字符串(类似于"data: { similarMovie: movieIdVariable }")。 - DominicM
显示剩余20条评论
4个回答

11

我认为我知道你想要什么,但是这篇文章被JSON stringify等外来问题过于复杂化了。这里有一个函数可以在代码中的多个地方使用,以执行一种或另一种类型的AJAX调用。

然后,您可能会有几个按钮,并在每个按钮的处理程序中调用该函数并更改传递给函数的参数。

doAjax('someval');/* use in button 1*/
doAjax('someOtherval');/* use in button 2*/



function doAjax(arg) {

    var someData = "";
    if (arg == 'someval') {
        someData = {
            "yfilter": $("#yearFilter").val(),
            "gfilter": $("#genreFilter").val()
        };
    } else {
        someData = "sampleString";
    }

    $.ajax({
        type: "POST",
        url: "somefile.php",
        cache: false,
        data: someData,
        dataType: "json",
        success: function(data) {
            if (arg == 'someval') {
                alert("success 1");
            } else {
                alert("success 2");
            }
        }
    })
}

同意,我认为不能仅仅通过将当前数组以相同的格式移动到一个变量中来实现。感谢你把问题搞清楚了! - DominicM

1
希望我理解了您的要求。 您可以这样做:
var parameters = {};
if (...) {
    parameters = $("#yearFilter").serializeArray();
}
if () {
    parameters = $("#genreFilter").serializeArray();
}

然后替换该行:

parameters: { "yfilter": $("#yearFilter").serializeArray(),
              "gfilter": $("#genreFilter").serializeArray() },

使用:

data: parameters,

但我不确定这是否是您所要求的! - jacoz
很接近了,但不行,因为我需要同时传递年份和类型数组 :) - DominicM

0

JSON类型应该是动态数据的最佳选择。像下面展示的那样,将任何数据推送到json中,因此可以动态创建您的json并将其作为ajax数据发送。

var employees = {
    accounting: [],
    dept: "HR"
}; 

employees.accounting.push({ 
   "firstName" : item.firstName,
   "lastName"  : item.lastName,
   "age"       : item.age 
});


$.ajax({
        url: POSTURL,
        type: 'POST',
        dataType: 'json',
        data : employees,
        contentType: 'application/json; charset=utf-8',
        success: function (results)
        {

        },
        error: function (results)
        {
            jQuery.error(String.format("Status Code: {0}, ", results.status, results.statusText));
        }
    });

0

试一下:

someData = JSON.stringify({ yfilter: $("#yearFilter").val(), gfilter: $("#genreFilter").val() });

它会起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接