2016-06-01 7 views
1

Ist es möglich, jQuery/einen AJAX-Aufruf zu definieren, um Abfrage-String-Parameter auf eine bestimmte Weise zu formatieren, außer nur meinen eigenen Serializer zu schreiben?Ist es möglich, anzupassen, wie jQuery AJAX-URL-Parameter serialisiert?

Ich habe einen jQuery Ajax-Aufruf, und am Hindurchleiten eines Objekts enthält URL Parameter

var params = {name: 'somename', favColors: ['red','blue']};

die Ajax-Aufruf Inspizieren $.get("/Controller/Action/", params) zeigt, dass die URL param Zeichenfolge ?name=somename&favColors[]=red&favColors[]=blue

Die Ziel-URL der erwartet Abfrageparameter, die [] für die wiederholten Array-Werte, z ?name=somename&favColors=red&favColors=blue

Vielen Dank!

Antwort

0

Sie jQuery.param() und seine zweite verwenden:

Wie in anderen Antwortstring bemerkt kann

Etwas wie auch als Objekt für die Daten Argument verwendet werden Argument, traditional, vorausgesetzt, dass das Ergebnis zu $.get():

var params = {name: 'somename', favColors: ['red','blue']}; 

$.get("/Controller/Action/", $.param(params, true)) 

Das Argument wird beschrieben als:

Ein boolescher angibt, ob eine traditionelle „flache“ Serialisierung durchzuführen.

In diesem Fall:

console.log($.param(params, true)); 
// "name=somename&favColors=red&favColors=blue" 
+0

nie herauszufinden gestoppt, was 'traditional' war, ich glaube, da ich es nie gebraucht habe ... macht meine Antwort – charlietfl

+0

Dank jetzt dumm aussehen, das ist genau die Art von Lösung, die ich suchte! – AndrewP

0

$.get() akzeptiert auch eine Abfragezeichenfolge als zweites Argument anstelle eines Objekts. Sie können das verwenden, um Ihre benutzergenerierte Abfragezeichenfolge anzufügen. Die ? wird für Sie angehängt, so dass Sie keine setzen müssen.

0

jQuery verwendet $.param(), um die Datenzeichenfolge von Objekten zu codieren. Sie könnten es selbst verwenden und entfernen Sie die [], die als %5B%5D codiert werden.

var reg =/%5B%5D/g; 
var params= $.param({name: 'somename', favColors: ['red','blue']}).replace(reg,''); 
$.get("/Controller/Action/", params) 

Getestet im Browser-Konsole nur

Verwandte Themen