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

これは問題なく動作しますが、データ パラメータを動的に渡す必要があります。今のところ、上記のデータ パラメータの内容と 1 つの文字列が必要です。

これを動的に渡すにはどうすればよいですか? /変数に格納して「data:」フィールドに渡すにはどうすればよいですか?

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

JSON.stringify II を試してみましたが、おそらくデータが配列であるために機能しませんでした。

年とジャンルの配列は、jquery ドロップダウン メニューから直接取得されます。「$("#yearFilter")」のように #id によって選択されます。これは選択フォーム要素です。

<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 のような無関係な問題によって過度に複雑になっています。これは、コード内のいくつかの場所で使用して、1 つのタイプの 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

それを試してみてください:

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

それが動作します。

于 2013-04-03T09:24:29.953 に答える
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 に答える