3

jQuery と Ajax を使用してフォーム データを送信するフォームがありますが、同じ名前と角かっこを持つ入力の値を送信することができません。

入力は次のようになり、異なる値になります。

<input type="text" name="service[]" value="Value 1">

値を取得するための変数は次のとおりです。

var service = $("input[name=service\\[\\]]")

次に、Ajax 経由で送信するデータを収集するための var は次のようになります。

var data = 'name=' + name.val() + '&email=' + email.val() + '&phone=' + phone.val() + '&service=' + service.val() + '&brief='  + encodeURIComponent(brief.val());

次に、メールを送信するためのPHPスクリプトに次のものが含まれています...

$service = $_POST['service'];
$body .= implode(' | ', $service);

So my question is, how do I get the values of the inputs with the name name=service[] and send them via Ajax.

Thanks in advance :)

4

5 に答える 5

2

あなたの質問に対する正確な答えではありませんが、これを行う簡単な方法があります。

入力フィールドをフォームにラップし、イベントを作成しon-submitます。実際には送信されないように、このイベントを false に戻します。

これがトリックです。イベントを false に戻す前に、ajax-request を実行してください。フォームに id を与え、seralize-method を使用して json-string を作成します。

[...]
data: $('#formIDGoesHere').serialize(),
[...]

これを POST 変数として PHP ファイルに投稿すると、すべての値が通常のように利用できなくなります $_POST

于 2012-11-27T10:06:30.470 に答える
1

なぜあなたはこれをやっている?

var data = 'name=' + name.val() + '&email=' + email.val() + '&phone=' 
           + phone.val() + '&service=' + service.val() + '&brief=' 
           + encodeURIComponent(brief.val());

エスケープされていない値から文字列を作成してはなりません。これはHTMLに当てはまり、URLエンコードされたフォームデータとSQLおよびJSONに当てはまり、構造化データを文字列形式で転送する他のほとんどすべての方法に当てはまります。

どうやらあなたは使っているようですがencodeURIComponent()、なぜ一度だけですか?

.serialize()すべての細部の世話をするものがあります。独自のURL文字列を作成する代わりにそれを使用してください。

alert($('form').serialize());
于 2012-11-27T10:10:53.783 に答える
1

これを読んで、これを試してみてください:

$('#theFormID').serialize().replace('%5B%5D', '[]') 

またはこれ

$.param(obj, true);
$.post(url,serializedObj,function(){});

true$.param、オブジェクトをシリアル化する従来の方法を使用する必要があることを示します。従来の方法では、同じパラメーター名に遭遇したときに角括弧を使用しません。

于 2013-08-01T09:32:35.687 に答える
0

次のような意味ですか:

var values = $("input[name='service\\[\\]']")
              .map(function(){return $(this).val();}).get();

var joined = values.join("|"); //so it shows val1|val2| val3 .. and pass to server
于 2012-11-27T10:11:47.353 に答える
0

service[] という名前の入力が複数ある場合は、以下のような入力を取得できます

var service = $("input[name=service\\[\\]]");

ただし、複数の入力がある場合、サービス変数は配列になり、サービス配列の各項目をループして、次のような値を取得する必要があります

for(var i=0;i<service.length;i++){
  data += service[i].val()+",";
}
于 2012-11-27T10:12:49.990 に答える