2012-10-13 12 views
10

Sto cercando di OTTENERE alcuni dati da un sito utilizzando jQuery $ .get. Devo impostare 2 parametri dello stesso tipo:Come passare più parametri dello stesso tipo a jQuery Get

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

jQuery sembra essere sovrascrittura prima istanza di q con il secondo e solo invio 1. Qualsiasi modo per aggirare questo?

Questo è il codice che stavo cercando di usare:

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

STOP, con le inutili modifiche senza senso. Questa è una violazione della politica editoriale di Stackoverflow. –

risposta

25

Prova:

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

modificare — ulteriori informazioni: parametri array con valori del genere vengono trattati in maniera particolare per jQuery. Per placare molti framework di server comuni, per impostazione predefinita (dal momento che la versione 1.5 o 1.6 penso) i nomi dei parametri includeranno "[]" (caratteri open e parentesi chiusa) come suffisso (nessun numero, contrariamente al mio errato commento sotto). Se non lo desideri, puoi impostare

jQuery.ajaxSettings.traditional = true; 

e sarà solo "q" anziché "q []".

+0

Questo non sembra costruire '& q = text & q = title'. Nel mio test con questa soluzione ottengo uno strano URL: '? OtherParam = x & q% 5B% 5D = text & q% 5B% 5D = title' –

+0

Sì, non funziona –

+1

@CliffRibaudo Sono abbastanza sicuro che funzioni; hai controllato per vedere cosa viene inviato al server tramite Firebug o il debugger di Chrome o qualcosa del genere? Nota che jQuery creerà (credo) parametri "q [0]", "q [1]" ecc., Con indici tra parentesi nel nome.Puoi farlo non farlo impostando 'jQuery.ajaxSettings.traditional = true'. – Pointy

1

È possibile scrivere l'URL come questo:

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

Bel ragazzo! Sono stato in grado di usare una variante di quello per ottenere ciò che volevo. Kewl! –

+0

jQuery è felice di fare quel lavoro per voi :-) – Pointy

+0

Come il tuo suggerimento è stato respinto dal mio server? –

10

E un altro modo per risolverlo, che non richiede encodeURIComponent() o scherzi con jQuery.ajaxSettings.traditional = true; che preferirei non fare perché non voglio interferire (anche temporaneamente) con ciò che altre parti del sito potrebbero fare contemporaneamente.

Is:

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

Si noti che se si evita la scorciatoia '$ .get()' e si utilizza '$ .ajax()' direttamente, è possibile forzare la serializzazione tradizionale senza alterare alcuna impostazione globale: '$ .ajax ({traditional: true, url:. ..}) '. Ma questa è un'altra buona opzione. –

5

Un altro approccio senza modificare jQuery.ajaxSettings.traditional = true; è quello di utilizzare $.param()http://api.jquery.com/jQuery.param/

Quindi qualcosa di simile:

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

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

Ottima soluzione. Grazie. – TrojanName

-1

Le cose sono abbastanza semplici e descritti nel sito web jQuery http://api.jquery.com/jquery.param/.

innanzitutto creare un oggetto params

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

prossima creare i dati da inviare al servizio.

var data = jQuery.param(params); 

Tale oggetto può essere inserito come parametro param della richiesta ajax. Mi piace usare un oggetto impostazioni

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