La Red de Conocimientos Pedagógicos - Conocimientos históricos - ¿Qué es AJAX?

¿Qué es AJAX?

Vaya al texto original del tutorial: /p/7

Conocimientos de escritura AJAX: JSON

¿Qué es JSON?

JSON se refiere a la notación de objetos JavaScript.

JSON es un formato ligero de intercambio de datos de texto.

JSON es independiente del idioma*

JSON se describe a sí mismo y es más fácil de entender.

* JSON utiliza la sintaxis de JavaScript para describir objetos de datos, pero JSON sigue siendo independiente del lenguaje y la plataforma. Los analizadores JSON y las bibliotecas JSON admiten muchos lenguajes de programación diferentes.

No más palabras, ¡vamos a hacer la foto!

Objetos json calificados:

["uno", "dos", "tres"] { "uno": 1, "dos": 2, "tres": 3 } { "Nombre de la persona": ["Zhang San", "Li Si"] }[ { "Nombre de la persona": "Zhang San"

Objeto json no calificado:

{Nombre: "Zhang San", "edad": 32}? // Los nombres de los atributos deben usar comillas dobles [32, 64, 128, 0xFFF] // No se pueden usar valores hexadecimales {"nombre": "Zhang San", "edad": undefinido}? //undefinido{ "nombre": "Zhang San" no se puede utilizar.

"Cumpleaños": nueva fecha ("Viernes, 26 de agosto de 2065438 01 07:13:10 GMT"),

" getName ":? function(){ return this . name;} ?//No se pueden usar funciones ni objetos de fecha}

Métodos de cadena y análisis

Dos métodos para convertir objetos JSON y cadenas en JavaScript;

JSON.parse(): se utiliza para convertir cadenas JSON en objetos JavaScript.

JSON . parse(' { " nombre ": " q 1mi " } '); JSON .parse ('[ 18, undefinido]'); //Error

JSON.stringify(): se utiliza para convertir valores de JavaScript en cadenas JSON.

JSON . stringify({ " name ": " q 1mi " })

Comparación con XML

El formato JSON fue desarrollado por Douglas Crockford en Propuesto en 2001 para reemplazar el engorroso formato XML.

El formato JSON tiene dos ventajas obvias: es fácil de escribir y claro de un vistazo; se ajusta a la sintaxis nativa de JavaScript y puede ser procesado directamente por el motor de interpretación sin agregar código de análisis. Por lo tanto, JSON fue rápidamente aceptado y se convirtió en el formato estándar para que los principales sitios web intercambien datos. Se escribió en ECMAScript 5 y se convirtió en parte del estándar.

Tanto XML como JSON utilizan métodos estructurados para marcar datos. Hagamos una comparación sencilla.

Los datos de algunas provincias y ciudades de China expresados ​​en XML son los siguientes:

lt? versión xml = "1.0" codificación = "utf-8"? gt ltcountrygt

ltnamegtChina;

ltprovincegt

ltnamegtHeilongjiang

ltcitygt

ltcitygtharbin

ltmeta name = " viewport " content = " ancho = ancho del dispositivo, escala inicial = 1 " >>p>

lttitle gtajax test lt/title gt;

ltscript src = "/jquery /3 3 . 1/jquery min . js " gt; lt/script gt; lt/head gt; ltbody gt ltbutton id="ajaxTest " >Prueba AJAX

$("#ajaxTest ") . Haga clic en (función(){

$.ajax({?url: "/ajax_test/",?tipo: "POST",?data: {nombre de usuario: "Q1mi", contraseña: 123456},? Éxito: función(datos){

alerta(datos)

?}

})

}) lt;/ script gt ; lt/body gt; lt/html gt;

views.py:

def ajax_test(solicitud): nombre de usuario = solicitud. POST.get("nombre de usuario")contraseña = solicitud. POST.get("contraseña") print(nombre de usuario, contraseña) return HttpResponse("OK ")

parámetro $.ajax

El par clave-valor en el parámetro de datos. Si el valor no es una cadena, es necesario convertirlo al tipo de cadena.

def ajax_test(solicitud):

Nombre de usuario = solicitud. POST.get("nombre de usuario")

Contraseña = solicitud.

POST.get("contraseña")

Imprimir (nombre de usuario, contraseña)

Devolver HttpResponse("OK ")

JS implementa AJAX

var B2 = documento . getelementbyid(" B2 ");

b2.onclick = función () {

//JS nativo var xmlHttp = new XMLHttpRequest(); p>

xmlHttp.open("POST","/ajax_test/",true);

xmlhttp.setrequestheader("Tipo de contenido","application/x-www-form-urlencoded " );

xmlhttp . enviar(" nombre de usuario = q 1mi amp; contraseña = 123456");

xmlhttp . if(xmlhttp . estado listo = = = 4 amp; ampxmlHttp.status === 200) {

alerta(xmlhttp . texto de respuesta);

? }

};

};

Cómo configurar csrf_token para solicitudes AJAX

Modo 1

Obtener Oculte el valor de csrfmiddlewaretoken en la etiqueta de entrada, colóquelo en los datos y envíelo.

$.ajax({?url: "/cookie_ajax/",?Tipo: "POST",?Datos: {

"Nombre de usuario":"Q1mi",

p>

[Contraseña]: 123456,

" csrfmiddlewaretoken ": $("[name = ' csrfmiddlewaretoken ']"). //¿Usar jQuery para extraer el archivo? valor de csrfmiddlewaretoken y unirlo en datos ?}, ?Éxito: función(datos){

console.log(data);

}})

Modo 2

Obtenga la cadena en la cookie devuelta y envíela en el encabezado de la solicitud.

Nota: Es necesario introducir un complemento jquery.cookie.js.

$.ajax({?url: "/cookie_ajax/",?type:"POST",?header:{"X-CSRFToken":$.

galleta('csrftoken')},? // ¿Obtener el csrftoken de la cookie y configurarlo en el encabezado de la solicitud? Datos: { "Nombre de usuario": "Q1mi", "Contraseña": 123456},? Éxito: función (datos) {

console.log (datos);

}})

O escribe un método getCookie tú mismo:

Función getCookie(nombre) {

var cookieValue = null

if(document . cookie amp; ampdocument.cookie! == '') {

var cookies = documento cookie . split(';');

for(var I = 0;iltcookies.lengthi) {

var cookie = jquery trim(cookies[ I. ]);

//¿Esta cadena de cookies comienza con el nombre que queremos? if (cookie.substring(0, nombre . longitud 1)= =(nombre ' = '){

cookieValue = decodeURIComponent(cookie . substring(nombre . longitud 1));

Break;

}

}

}

Devolver cookieValue} var csrftoken = get cookie(' csrftoken '); p>

Es demasiado problemático escribir esto cada vez. Puede usar el método ajaxSetup() para configurar la solicitud ajax de manera uniforme

Función csrfSafeMethod(método) {

.

// ¿Estos métodos HTTP no requieren protección CSRF? return(/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));}$.ajaxSetup({?beforeSend: function(xhr, settings) ){

if (!csrfsafe método(configuración . tipo) amp; amp !this.crossDomain) {

?xhr .setrequestheader("X-CSRFToken",CSRFToken);

}

}});

Nota:

Si utiliza el método para obtener csrftoken de una cookie, debe asegurarse que la cookie tiene un valor csrftoken

Si el archivo HTML representado por su vista no contiene {csrf_token}, es posible que Django no configure la cookie CSRFtoken

En este momento, usted. necesita usar el decorador sure_csrf_Cookie() para forzar la configuración de la cookie

django.views.decorators.csrf import seek_csrf_cookie @ sure_csrf_cookie definición de inicio de sesión (solicitud): pasar

Para. Para obtener más detalles, consulte el CSRF oficial en Djagno File.

Archivo de carga AJAX

XMLHttpRequest es una interfaz de navegador a través de la cual podemos permitir que Javascript se comunique con HTTP(S).

XMLHttpRequest es una forma común de interactuar con datos de primer y segundo plano en los navegadores actuales. En febrero de 2008, se propuso un borrador de XMLHttpRequest Nivel 2. En comparación con la generación anterior, tiene algunas características nuevas, entre las cuales FormData es un objeto recién agregado de XMLHttpRequest Nivel 2. Úselo para enviar formularios y simular envíos de formularios. La mayor ventaja es que puede cargar archivos binarios. Específico a continuación.

Primero, echemos un vistazo al uso básico de FormData: el objeto formData, que puede combinar los nombres y valores de todos los elementos del formulario en una cadena de consulta y enviarlo a un segundo plano. Simplemente pase el formulario como parámetro al constructor FormData:

Presentamos cómo usar FormData para cargar archivos.

django.views.decorators.csrf importar asegurar_csrf_cookie @make_csrf_cookiedef inicio de sesión (solicitud):

pasar

o usar

var formulario = document . getelementbyid(" form 1 "); var FD = new FormData(form);

De esta manera, el fd también se puede enviar directamente a segundo plano a través del método ajax send().

Nota: Dado que FormData es una nueva interfaz de XMLHttpRequest Nivel 2, los navegadores IE por debajo de IE10 actualmente no admiten FormData.

Ejercicio (¿se ha registrado el nombre de usuario?)

Introducción a la función

En el formulario de registro, cuando el usuario completa el nombre de usuario y mueve el cursor, Enviará automáticamente una solicitud asincrónica al servidor. El servidor devuelve si el nombre de usuario ha sido registrado.

Análisis de caso

El formulario de registro se proporciona en la página.

Vincula el controlador de eventos onblur en la etiqueta de entrada del nombre de usuario.

Cuando la etiqueta de entrada pierde el foco, obtiene el valor del campo del formulario de nombre de usuario y envía una solicitud AJAX al servidor;

La función de vista de Django procesa la solicitud, obtiene el valor del nombre de usuario, y determina si el usuario está registrado en la base de datos. Si es así, devuelva "El usuario está registrado", en caso contrario responda "El nombre de usuario puede registrarse".

Serialización

Serializador integrado de Django

def books_json (solicitud): book_list = models. book .objects . all() [0:10] de django .core import serializer ret = serialize("JSON", book_list) return HttpResponse(ret)

Agregue un ejemplo de complemento SweetAlert.

Haz clic para descargar el proyecto Bootstrap-sweetalert.

$(".BTN-Peligro"). on("click ", function (){

Swal({ title: "¿Estás seguro de que deseas eliminarlo?", text: "¡Si lo eliminas, no podrás recuperarlo! ", escriba: "advertencia", showcancelbutton: verdadero, clase de botón de confirmación: "BTN-Danger", confirmbuttontext: "Eliminar", cancelButtonText: "Cancelar", cierre confirm: false.

},

Función () {

? var eliminarId = $(este).

attr(" datos _ id ");

? $.ajax({ url: "/delete_book/", tipo: "publicación", datos: {"id": deleteId}, éxito: función(datos){

?if (data.status = == 1) {

Swal("Eliminación exitosa!" "¡Estás listo para ejecutar!", "Éxito"

} De lo contrario {

Swal("Error al eliminar", "¡Puedes volver a intentarlo!", "Error")

}

}

})

p >

});})

Texto original: AJAX-

Autor: Q1mi-?

De: Blog Garden-AJAX Roadmap

Tutorial AJAX

Si necesitas un tutorial, puedes dejar un mensaje "AJAX" y lo enviaré a usted después de verlo.