C'è un modo per impostare il metodo di invio HTTP di completamento automatico di Jquery su POST anziché su GET?Come si imposta il completamento automatico JQuery su POST anziché su GET?
risposta
Sfortunatamente, non vi è alcuna opzione per il completamento automatico che consentirà di impostarlo. Esiste, tuttavia, una singola posizione nel codice del plugin in cui viene chiamata la funzione $.ajax
. Non è stata specificata l'opzione type
, il che significa che verrà impostato automaticamente su una richiesta GET. Si potrebbe modificare il $.ajax
chiamata (che inizia sulla linea 361 della versione più recente) per includere un'opzione type
e impostare il valore di "post":
$.ajax({ //line 361
type: "post",
...
È possibile utilizzare il
$.ajaxSetup({ type: "post" });
prima la chiamata al completamento automatico, e sostituirà la chiamata Ajax sulla pagina.
Questo modifica * tutte * le chiamate AJAX effettuate tramite jQuery. Questo interagisce male con altri codici in esecuzione sulla pagina. Molto pericoloso – usr
Probabilmente meglio passare in con il parametro sorgente piuttosto che impostare a livello globale in questo modo:
$("#input").autocomplete({
source: function (request, response) {
$.post("/AjaxPostURL", request, response);
}
});
Ecco una versione più completa di $ .post con dati aggiuntivi passati: $(function() { \t \t var options = { \t \t \t \t \t \t \t url: "/web/ajax.php?a=query-save-projects&w=app", \t \t \t \t type: 'post', \t \t \t \t data: { \t \t \t \t \t "args":$().crypt({method:"b64enc",source:JSON.stringify(_system) }), \t \t \t \t \t "url":document.URL \t \t \t \t \t } \t \t \t \t }; \t \t $("#query-save-project-name").autocomplete({ \t \t \t \t \t source: function (request, response) { $.post(options["url"], options["data"], response, "json") }, \t \t \t \t \t minLength: 2 \t \t \t \t \t }); \t \t });
–
mshaffer
Si interrompe se una delle richieste non riesce. In tal caso, 'response' non viene mai chiamato quale interruzione del plug-in di completamento automatico. Altrimenti questo è l'approccio corretto. – usr
E 'davvero una cattiva idea quella di modificare il codice sorgente, perché perderai le modifiche sul prossimo aggiornamento del widget. È meglio impostare il tipo globale su "post" o passare un oggetto richiesta/risposta.
L'esecuzione di un'impostazione POST globale modifica * tutte * le chiamate AJAX effettuate tramite jQuery. Questo interagisce male con altri codici in esecuzione sulla pagina. Molto pericoloso – usr
Ho sovrascritto quella funzione nel nostro file JavaScript (caricata dopo l'interfaccia utente jQuery) per far sì che accetti GET/POST come un'altra opzione.
$.ui.autocomplete.prototype._initSource = function() {
var array, url,
that = this;
if ($.isArray(this.options.source)) {
array = this.options.source;
this.source = function(request, response) {
response($.ui.autocomplete.filter(array, request.term));
};
} else if (typeof this.options.source === "string") {
url = this.options.source;
/*added*/ var httpMethod = this.options.type ? this.options.type : 'GET';
this.source = function(request, response) {
if (that.xhr) {
that.xhr.abort();
}
that.xhr = $.ajax({
url: url,
data: request,
dataType: "json",
/*added*/ type: httpMethod,
success: function(data) {
response(data);
},
error: function() {
response([]);
}
});
};
} else {
this.source = this.options.source;
}
};
Penso che risolve i problemi menzionati da altre persone al di sopra senza rompere ogni altra cosa:
- modificando direttamente il file UI jQuery renderebbe l'aggiornamento di jQuery UI un dolore, e vi impedisce di utilizzare le API di Google per ospitare il vostro jQuery file
- $ .ajaxSetup influisce su ogni autocomplete o chiamata ajax attraverso il nostro prodotto
- Scrivere un $ .post e passarlo come una funzione è interessante, ma molto digitazione se usi decine di autocompleti attraverso il tuo sito.
Modificare la fonte significa che avrai problemi ad aggiornare alla versione successiva. – usr
Fortunatamente, le funzioni in JavaScript sono modificabili, quindi non è necessario.Tuttavia, qualsiasi modifica a quella particolare funzione andrebbe persa se una nuova versione di jQuery lo avesse cambiato. Ecco perché non vorresti usare questa strategia in più delle circostanze più rare. – DrShaffopolis
- 1. Completamento automatico jQuery su evento selezionato
- 2. Come ottenere il completamento automatico di jQuery su pop-up?
- 3. ComboBox Completamento automatico su Sottostringa
- 4. jQuery UI completamento automatico: come inviare i dati del post?
- 5. Implementare il completamento automatico su MongoDB
- 6. completamento automatico Makefile su Mac
- 7. jQuery completamento automatico
- 8. JQuery Casella di testo di completamento automatico su eventi selezionati
- 9. jQuery completamento automatico immettere il problema chiave
- 10. Ricerca su clic con completamento automatico di Jquery
- 11. jQuery: ottieni JSON tramite ajax, ma con POST anziché GET
- 12. jQuery AJAX POST si trasforma in GET
- 13. Visualizza jquery ui elenco di completamento automatico su evento focus
- 14. jQuery UI-completamento automatico e completamento automatico di Google Chrome
- 15. jQuery evento selezione completamento automatico
- 16. jQuery completamento automatico sulla classe, come ottenere l'ID
- 17. Get angularJS completamento automatico in Webstorm/PHPStorm
- 18. jquery $ .post() vs $ .get()
- 19. Completamento automatico JQuery: ignorare il comportamento predefinito
- 20. Metodo WCF che invia POST anziché GET
- 21. jQuery completamento automatico con immagini
- 22. Completamento automatico di Jquery e Gmail Completamento automatico
- 23. Completamento automatico del codice su Eclipse
- 24. Il completamento automatico dell'interfaccia utente jQuery mostra il valore anziché l'etichetta nel campo di input
- 25. Come si imposta src su un iframe con jQuery?
- 26. Come utilizzare il completamento automatico JQuery per più parole
- 27. Come si usa il completamento automatico per migliaia di voci?
- 28. Accelerazione jQuery Completamento automatico (elenchi inevitabilmente lunghi)
- 29. jQuery ajax() vs get()/post()
- 30. Django Haystack completamento automatico su due (multipli) campi
Inoltre, è possibile modificare MVC per consentire GET. Vedi http://stackoverflow.com/questions/2350921/asp-net-mvc-2-failed-with-jquery-ajax-response#2350957 – Daveo
@Daveo: È vero, ma dobbiamo essere cauti nel disabilitare una funzione che era destinato a proteggerci dagli exploit di vulnerabilità del browser. – StriplingWarrior
Forse di interesse: una richiesta di funzionalità (http://bugs.jqueryui.com/ticket/5353) e una spiegazione del motivo per cui è stata rifiutata (http://forum.jquery.com/topic/jqueryui-autocomplete-post -Opzione-per-remote-request # 14737000002084408). – StriplingWarrior