¿Hay alguna manera de establecer el método de envío HTTP Autocompletar de Jquery en POST en lugar de GET?¿Cómo configuro JQuery Autocompletar en POST en lugar de GET?
Respuesta
Desafortunadamente, no hay opción para el autocompletador que le permita configurar eso. Sin embargo, hay un lugar único en el código del complemento donde se llama a la función $.ajax
. No se ha especificado la opción type
, lo que significa que se establecerá de manera predeterminada en una solicitud GET. Se podría modificar el $.ajax
llamada (que comienza en la línea 361 de la última versión) para incluir una opción type
y establezca su valor en "post":
$.ajax({ //line 361
type: "post",
...
Puede utilizar el
$.ajaxSetup({ type: "post" });
antes la llamada para autocompletar, y anulará la llamada ajax en la página.
Esto modifica * todas * las llamadas AJAX realizadas a través de jQuery. Esto interactúa mal con otro código que se ejecuta en la página. Altamente peligroso. – usr
Probablemente mejor para pasarlo con el parámetro de origen en lugar de establecer de forma global como esto:
$("#input").autocomplete({
source: function (request, response) {
$.post("/AjaxPostURL", request, response);
}
});
Aquí hay una versión más completa de $ .post con datos adicionales que se pasan: $(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
Esto se rompe si una de las solicitudes falla. En ese caso, nunca se llama 'response', lo que rompe el complemento de autocompletar. De lo contrario, este es el enfoque correcto. – usr
Es una muy mala idea de editar el código fuente, porque si no se pierden los cambios en la próxima actualización del widget. Es mejor configurar el tipo global para "publicar" o pasar un objeto de solicitud/respuesta.
Hacer una configuración POST global modifica * todas * las llamadas AJAX realizadas a través de jQuery. Esto interactúa mal con otro código que se ejecuta en la página. Altamente peligroso. – usr
Sobreescribí esa función en nuestro archivo JavaScript (cargado después de la interfaz de usuario jQuery) para que acepte GET/POST como otra opción.
$.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;
}
};
Creo que resuelve los problemas mencionados por otras personas anteriormente sin romper cualquier otra cosa:
- Edición del archivo de interfaz de usuario jQuery directamente haría que la actualización jQuery UI un dolor, y evitar que utilice las API de Google para alojar su jQuery archivos
- $ .ajaxSetup afectaría cada llamada de autocompletado o ajax en nuestro producto
- Escribir un $ .post y pasarlo como una función es genial, pero un montón de tipeo si usa docenas de autocompletas en su sitio.
La modificación de la fuente significa que tendrá problemas para actualizar a la próxima versión. – usr
Afortunadamente, las funciones en JavaScript son mutables, por lo que no es necesario.Pero cualquier cambio en esa función en particular se perderá si una nueva versión de jQuery lo cambiara. Por eso no querrás usar esta estrategia en más que las circunstancias más raras. – DrShaffopolis
- 1. jQuery UI Autcomplete: POST en lugar de GET
- 2. jQuery get post data
- 3. jquery $ .post() vs $ .get()
- 4. JQuery: Convertir GET URL en POST
- 5. jQuery AJAX POST se convierte en GET
- 6. jQuery ajax() vs get()/post()
- 7. Método WCF enviando POST en lugar de GET
- 8. GET y POST en cakephp
- 9. jQuery: obtener JSON mediante ajax, pero con POST en lugar de GET
- 10. Fijaciones POST/GET en Raqueta
- 11. GET vs POST en AJAX?
- 12. GET vs POST en Ajax
- 13. jQuery: Tengo solicitud de OPCIONES en lugar de GET
- 14. jQuery Autocompletar utilizando extraParams para pasar variables GET adicionales
- 15. cómo obtener variables GET y POST con JQuery?
- 16. Editor de lugar con autocompletar
- 17. Post/Redirect/Get Pattern en ASP.NET MVC
- 18. jQuery autocompletar en la clase, cómo obtener la identificación
- 19. ¿Cuándo se debe usar GET en lugar de POST en una aplicación web?
- 20. Unity GET/POST Wrapper
- 21. Rails POST, PUT, GET
- 22. Haciendo el widget Autocompletar de jQuery UI * en realidad * autocompletar
- 23. solicitud de POST jQuery realmente envía como Get
- 24. GET y POST en la misma página?
- 25. HttpURLConnection realiza siempre una solicitud GET en lugar de una solicitud POST a pesar de setDoOutput (true) y setRequestMethod ("POST")
- 26. Detectar si el método HTTP (POST, GET) en jQuery.ajaxComplete()
- 27. Cómo pasar de POST a GET en PHP CURL
- 28. ¿Cómo configuro IIS para aceptar solicitudes POST?
- 29. Solr jQuery Autocompletar no autocompletar
- 30. Cómo esperar la respuesta en $ .post jQuery
También puede cambiar MVC para permitir GET. Consulte http://stackoverflow.com/questions/2350921/asp-net-mvc-2-failed-with-jquery-ajax-response#2350957 – Daveo
@Daveo: es cierto, pero debemos tener cuidado al desactivar una característica que era destinado a protegernos de los exploits de vulnerabilidad del navegador. – StriplingWarrior
Posiblemente de interés: una solicitud de función (http://bugs.jqueryui.com/ticket/5353) y una explicación de por qué fue rechazada (http://forum.jquery.com/topic/jqueryui-autocomplete-post -option-for-remote-request # 14737000002084408). – StriplingWarrior