0

を使用してフォームをシリアル化した後、この出力を取得していますserialize()

cambio_estado_factura%5Bestado%5D=1

ドキュメントが言うように、私はこの形式で何かを期待していました:

a=1&b=2&c=3&d=4&e=5

これは私がシリアル化しているフォームです:

<form id="cambio_estado" action="">
    <div class="fld ">
        <label for="cambio_estado_factura_estado">Estado</label>
        <ul class="radio_list">
            <li>
                <input name="cambio_estado_factura[estado]" type="radio" value="1" id="cambio_estado_factura_estado_1">
                <label for="cambio_estado_factura_estado_1">Recibida</label>
            </li>
            <li>
                <input name="cambio_estado_factura[estado]" type="radio" value="2" id="cambio_estado_factura_estado_2">
                <label for="cambio_estado_factura_estado_2">Registrada</label>
            </li>
        </div>
    <input id="cambio_estado" type="submit" value="Cambiar">
</form>

そしてこれはjqueryコードです:

$('form#cambio_estado').submit(function(e){
    e.preventDefault();
    alert();
    console.log($('form#cambio_estado'));
    var datos_formulario = $('form#cambio_estado').serialize();
    console.log(datos_formulario);
    $.post($("section#consultarFactura").data("url-cambio-estado"),
        {"cambio_estado_factura": datos_formulario }
    );

});

何か案が?

jQuery 1.6.1

4

3 に答える 3

2

これは実際にはの正しい動作ですserialize()

あなたの問題は、フォームの名前がですcambio_estado_factura[estado]。これは実際にcambio_estado_factura%5Bestado%5Dは、要素のエスケープされた名前であるに変換されます。Serialize()フォームの各要素に使用する名前を使用します。結果のクエリ文字列に別の名前を表示する場合は、フォーム自体に適切な名前を使用してください。

例-このフォームは、それa=1&a=2を呼び出すと返されserialize()ます。

<form>
    <input type="text" name="a" value="1" />
    <input type="text" name="b" value="2" />
</form>

編集:

あなたのコメントを参照すると、これは私の例ですparse_str

parse_str('cambio_estado_factura%5Bestado%5D=1', $arr);
var_dump($arr);
echo $arr["cambio_estado_factura"]["estado"] == 1 ? "Value set" : "Value not set";

これは次を返します:

array
 'cambio_estado_factura' => 
    array
      'estado' => string '1' (length=1)

Value set

つまり、実際にはマルチレベルであるのに、アレイはシングルレベルであると想定します。

于 2012-09-05T11:30:29.763 に答える
0

文字列はエンコードされています。

%20 is space
%5B is '['
and %5D is ']'

cambio_estado_factura[5Bestado]配列として指定したので、それが渡す最終出力は1つのパラメーターのみです。

cambio_estado_factura[5Bestado] = 1

これはURLエンコードと同じであり、コンテンツをURLに送信する安全な方法です。これも予想される方法です。

于 2012-09-05T11:32:45.340 に答える
0

入力を取得しnameます。これはname="cambio_estado_factura[estado]"、2つの入力コントロールが同じ名前を共有しているため、フォームは1つだけを送信します。

この名前は、フォーム送信でデータを送信するときに使用されます。コントロールが異なれば、応答も異なります。たとえば、IDは異なるが、名前が同じラジオボタンが複数あるとします。送信されると、応答には1つの値しかありません。

したがって、フォームに一意の名前を付けるように注意してください。

于 2012-09-05T11:33:04.100 に答える