3

了解しました。jqueryajaxを介してフォームを送信します。すべての入力は配列内にあり、多次元です。

配列キーを質問IDとして使用する動的な形式です。サブキーは、質問セットで質問をグループ化するために使用されます。

<form name="testing" id="testing" method="post">
    <label>Question 1?</label> 
    <input type="text" name="data[14][1]" id="" class="" value=""><br>
    <label>Question 2?</label> 
    <input type="text" name="data[16][1]" id="" class="" value=""><br>
    <label>Question 1?</label> 
    <input type="text" name="data[14][2]" id="" class="" value=""><br>
    <label>Question 2?</label> 
    <input type="text" name="data[16][2]" id="" class="" value=""><br>
    <label>Question 3?</label> 
    <select name="data[19]" id="" class="">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
    </select><br>
    <input type="submit" value="Submit">
</form>

これが私の例のhtmlです。これが私の例のjqueryです:

$("#testing").submit(function() { 
           var data = $('input[name^="data\\["]').serializeArray();
                $.ajax({ 
                 type: "POST",
                 url:  "upload.php",
                 data: {internalform: "submit", data: data},
                 dataType : "text",

           success: function(returndata){
            if(returndata == "no") 
             { return false;
             } else {
               alert("clicked 1 " + returndata);
                }
                 } 
                 });    
            return false;
            }); 

問題は、これを戻り配列として取得することです。

Array
(
    [0] => Array
        (
            [name] => data[14]
            [value] => sd
        )

    [1] => Array
        (
            [name] => data[16]
            [value] => s
        )

)

しかし、私はこのような配列が必要です:

Array ( [14] => ddd [16] => ddd [19] => 4 ) 

確かにシンプルですが、何かが足りません。なぜそれをしているのかは知っていますが、私が望む/必要な方法でそれを得ることができません。誰かが助けることができますか?

4

4 に答える 4

3

以下のスニペットを試してください。これはテストしていませんが、おそらく機能するはずです。

var data = $('input[name^="data\\["]').serializeArray();パーツを以下のスニペットに置き換えます

var data = {};
$.each($('input[name^="data\\["]')​.serializeArray()​, function() {
    data[this.name] = this.value;
})​;

これを試してみてくださいそれは前の問題に来るデータを解決します

私はこれを解決しました

var data = {};
$.each($('select[name^="data\\["] , input[name^="data\\["]').serializeArray(), function() {
   var vv = this.name.replace(/data/, '' ).replace(/(\[[0-9]\])$/,'');
   data[vv] = this.value;           
});
于 2013-01-23T08:00:22.210 に答える
0

jqueryでこれを行う方法はわかりませんが、phpでその配列を変換できます

$result = array();
foreach($array as $item) {
   $index = intval(preg_replace("/data\[([0-9]*)\]/", '\1' $item['name']));
   $result[$index] = $item['value'];
}
于 2013-01-23T07:59:26.463 に答える
0

これを試して

var data = {}; 
$('input[name^="data\\["]').serializeArray().map(function(n){
    var name = n['name'].replace(/data\[([0-9]*)\]\[(.*)\]/, '$1');
    data[name] = n['value'];
});
于 2013-01-23T08:25:29.477 に答える
0
var data = {};
$.each($('input[name^="data\\["]')​.serializeArray()​, function() {
    data[this.name] = this.value;
})​;

コンソールエラーが発生します>>

Uncaught SyntaxError:引数リストの後に)がありません

于 2016-10-23T16:47:24.107 に答える