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

时间:2012-10-28 13:29:46

标签: ajax jquery

我有这个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,
...

4 个答案:

答案 0 :(得分: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");
            }
        }
    })
}

答案 1 :(得分:1)

希望我明白你的要求。 你可以这样做:

var parameters = {};
if (...) {
    parameters = $("#yearFilter").serializeArray();
}
if () {
    parameters = $("#genreFilter").serializeArray();
}

然后替换行:

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

使用:

data: parameters,

答案 2 :(得分: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));
        }
    });

答案 3 :(得分:0)

试一试:

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

它会起作用。