8 Stimmen

Warum wird dieses Semikolon angezeigt, wenn ich jQuery serialize() auf Eingaben mit eckigen Klammern im Namen verwende?

Ich habe das folgende HTML:

<input type="checkbox" id="options_1" value="options_1" name="options[]">  
<input type="checkbox" id="options_2" value="options_2" name="options[]">  
<input type="checkbox" id="options_3" value="options_3" name="options[]">  

Ich überprüfe die ersten beiden Optionen und sende sie über Ajax in jQuery an den Server:

$.ajax({
    type: "POST",
    url: "myfile.php",
    data: {
        'options':$('input[name="options[]"]').serialize()
    },
    dataType: 'json',
    beforeSend: function(){
           //do some stuff
    },
    success: function(msg){
        //do some stuff
    }
});

Firebug zeigt mir die Daten, die gepostet wurden:

Optionen options%5B%5D=options_1&options%5B%5D=options_2
So weit, so gut.

In myfile.php erhalte ich die POST-Variable wie folgt:

$options = $_POST['options'];

Jetzt, wenn ich echo $options erhalte ich dies:

"options[]=options_1&options;[]=options_2"

Woher kommt das Semikolon vor dem zweiten Klammerpaar? Das macht mich wahnsinnig.

Ich habe bereits utf8_decode zu den POST-Daten sowie urldecode y rawurldecode . Es ändert sich nichts. Ich habe auch die eckigen Klammern im Ajax-Aufruf wie folgt ausgeblendet:

data: {
    'options':$('input[name="options\\[\\]"]').serialize()
},

Das hat auch nicht geholfen. Hat jemand eine Idee?

2voto

DominicM Punkte 5652

Ich hatte genau dieses Problem, und ich war nur in der Lage zu bekommen, es zu arbeiten, indem Sie ".serializeArray()", ich hoffe, das war, was Sie gesucht haben.

data: {
    'options':$('input[name="options[]"]').serializeArray()
},

Für mich bedeutet dies die Ausgabe einer Standardzeichenkette im gleichen Format wie bei GET-Anfragen.

1voto

Peter Ivan Punkte 1401

Ich empfehle, [] aus html-Namen zu entfernen, das ist schlechtes Design. Es kann ein Problem geben bei jQuery-Seite oder auch PHP. Ich kann keine anderen Probleme in Ihrem Code erkennen.

Welche Zeichen sind für das HTML-Attribut Name zulässig?
Was sind gültige Werte für das Attribut id in HTML?

0voto

Sam Segers Punkte 1871

Warum verwenden Sie die Klammern[] und denselben Namen für jedes Eingabeelement? Wenn ich Sie richtig verstehe, können Sie durch ein Wrapping-Element serialisieren

<form id="options">
    <input type="checkbox" id="options_1" value="options_1" name="option1" />  
    <input type="checkbox" id="options_2" value="options_2" name="option2" />  
    <input type="checkbox" id="options_3" value="options_3" name="option3" />  
</form>

Sie können also wie folgt serialisieren

data: {
    'options':$('#options').serialize()
},

0voto

Sergio Punkte 27870

Vielleicht möchten Sie lesen cette und versuchen Sie dies:

data: {
        'options':$('input[name="options[]"]').replace('%5B%5D', '[]') 
    },

oder dies

$.param(obj, true);

En true im $.param zeigt an, dass die traditionelle Methode der Serialisierung eines Objekts verwendet werden soll. Die herkömmliche Methode verwendet keine eckigen Klammern, wenn sie auf denselben Parameternamen trifft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X