2012-10-13 5 views
10

Ich versuche, einige Daten von einer Website mit jQuery $ .get abzurufen. Ich brauche zwei Parameter des gleichen Typs zu setzen:Wie übergeben Sie mehrere Parameter des gleichen Typs an jQuery Get

..&q=Some Text&q=Some other text 

jQuery erscheinen mit dem zweiten der ersten Instanz von q zu überschreiben und nur 1. Jeden Weg, um dies zu senden?

Dies ist der Code, den ich verwenden wollte:

var params = { 
     "otherParam":"x", 
     "q":text, 
     "q":title 
}; 
$.get(url, params, mySuccessFunction); 
+1

STOP, mit den sinnlosen sinnlosen Änderungen. Das ist eine Verletzung der redaktionellen Richtlinien von Stackoverflow. –

Antwort

25

Versuchen:

var params = { 
    "otherParam": "x", 
    "q": [ text, title ] 
}; 

bearbeiten — weitere Informationen: Array-Wert wie Parameter, die speziell von jQuery behandelt. Um viele gängige Server-Frameworks zu bereinigen, werden diese standardmäßig (seit Release 1.5 oder 1.6) zu Parameternamen führen, die "[]" (open- und close-bracket-Zeichen) als Suffix enthalten (keine Zahl, im Gegensatz zu meinem Fehler) kommentiere unten). Wenn Sie nicht, dass möchten, können Sie

jQuery.ajaxSettings.traditional = true; 

gesetzt und es wird nur „q“ anstelle von „q []“ sein.

+0

Dies scheint nicht zu erstellen & q = text & q = title'. In meinem Test mit dieser Lösung bekomme ich eine seltsame URL: '? OtherParam = x & q% 5B% 5D = Text & q% 5B% 5D = title' –

+0

Ja, das funktioniert nicht –

+1

@CliffRiaudo Ich bin mir ziemlich sicher, dass es funktioniert; Haben Sie überprüft, was über Firebug oder den Chrome-Debugger oder etwas Ähnliches an den Server gesendet wird? Beachten Sie, dass jQuery (denke ich) die Parameter "q [0]", "q [1]" usw. mit Klammern im Namen erstellt.Sie können dies jedoch nicht tun, indem Sie 'jQuery.ajaxSettings.traditional = true' setzen. – Pointy

1

Sie können die URL wie folgt schreiben:

$.get(
    url+'?q='+encodeURIComponent(text)+'&q='+encodeURIComponent(title)+'&otherParam='+encodeURIComponent('x'), 
    mySuccessFunction 
); 
+0

Super Kumpel! Ich konnte eine Variante davon benutzen, um zu bekommen, was ich wollte. Kewl! –

+0

jQuery arbeitet gerne für Sie :-) – Pointy

+0

Wie wurde Ihr Vorschlag unten von meinem Server abgelehnt? –

10

Und eine andere Art und Weise zu lösen, die nicht encodeURIComponent() oder mit jQuery.ajaxSettings.traditional = true; Unordnung erfordert, das ich nicht bevorzugen, weil ich will (nicht stören sogar temporär) mit dem, was andere Teile der Site gleichzeitig tun könnten.

ist:

var params=[ 
     {name:"q", value:title}, 
     {name:"q", value:text} 
]; 
$.get(url, params, mySuccessFunction); 
+2

Wenn Sie die Kurzschrift '$ .get()' vermeiden und '$ .ajax()' direkt verwenden, können Sie die traditionelle Serialisierung erzwingen, ohne globale Einstellungen zu ändern: '$ .ajax ({traditionell: true, url:. ..}) '. Aber das ist eine weitere gute Option. –

5

Ein weiterer Ansatz ohne jQuery.ajaxSettings.traditional = true; Modifizierung ist $.param()http://api.jquery.com/jQuery.param/

So etwas wie folgt zu verwenden:

var params = { 
    "otherParam": "x", 
    "q": [ text, title ] 
}; 

$.get(url, $.param(params, true), mySuccessFunction); 
+0

Große Lösung. Vielen Dank. – TrojanName

-1

Dinge ziemlich einfach sind und in jQuery Website http://api.jquery.com/jquery.param/ beschrieben.

zuerst ein params Objekt

var params=[{ 
    name: 'param1', 
    value: 'hello' 
}, 
{ 
    name: 'param1', 
    value: 'alex' 
}]; 

erstellen erstellen als nächstes die Daten an den Dienst gesendet werden.

var data = jQuery.param(params); 

Dieses Objekt kann als Datenparameter der AJAX-Anforderung eingefügt werden. Ich mag die Verwendung eines Einstellungsobjekts

var settings={ 
    url: 'api/domain/timeline', 
    type: 'get', 
    contentType: 'application/json', 
    data: data 
    }; 
$.ajax(settings); 
Verwandte Themen