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");
        }

这工作正常,但我需要动态传递数据参数。现在我需要上面的数据参数内容和一个字符串。

我如何动态传递这个?/ 如何将其存储在变量中并将其传递给“数据:”字段?

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

我试过 JSON.stringify II 可能由于数据是一个数组而无法让它工作。

年份和流派数组直接来自 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

4 回答 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");
            }
        }
    })
}
于 2012-10-28T14:25:49.970 回答
1

希望我已经理解你的要求。你可以这样做:

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

然后替换该行:

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

和:

data: parameters,
于 2012-10-28T13:47:01.390 回答
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));
        }
    });
于 2012-10-28T15:26:35.070 回答
0

尝试一下:

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

它会起作用的。

于 2013-04-03T09:24:29.953 回答