javascript - ejemplo - ajax php mysql
¿Cómo envía Postman las solicitudes? ajax, misma política de origen (3)
He encontrado esta extensión de cromo muy útil llamada cartero, esta es una extensión muy útil especialmente cuando se trata de programar aplicaciones RESTful.
Una cosa en la que estoy confundido es ¿cómo este plugin / extensión puede enviar solicitudes POST con éxito en diferentes dominios?
Intenté votar en una encuesta usando Postman como este.
Después de enviar eso, el voto realmente se contó, pero cuando intenté hacerlo usando ajax y javascript, falla, debido a la política de origen de los navegadores.
¿Cómo es eso posible?
Aquí está mi código usando jquery. Lo usé en mi computadora, localhost.
init: function() {
$.ajax({
url: ''http://domain.com/vote.php'',
type:''POST'',
dataType: ''html'',
data: {
id: ''1''
},
success: function(data) {
if ( data == ''voted'' ) {
$(''.set-result'').html( ''you already voted. try again after 24 hours'' );
} else {
$(''.set-result'').html( ''successfully voted'' );
}
}
});
},
Las aplicaciones empaquetadas de Chrome pueden tener permisos de dominios cruzados. Cuando instala Postman, le informa que esta aplicación accederá a cualquier dominio.
Al colocar */*
en la sección de permissions
de su archivo de manifiesto, puede hacer esto.
Lea más aquí: https://developer.chrome.com/extensions/xhr.html
Parece que el sitio que aloja el sondeo (el script "vote.php") debe tener un encabezado "Access-Control-Allow-Origin" configurado para permitir la publicación desde una lista de sitios (o todos los sitios).
Un valor de * para el encabezado permitirá publicar desde cualquier sitio web:
Access-Control-Allow-Origin: *
es decir, podría poner lo siguiente en la parte superior de vote.php
header(''Access-Control-Allow-Origin: *'');
Las extensiones y aplicaciones de Chrome no están sujetas a las mismas limitaciones de seguridad que las páginas web normales.
Sugerencias adicionales para la depuración:
Si intenta acceder a los servicios remotos desde las páginas web que tiene abiertas en su sistema de archivos local en su navegador, es posible que su navegador les aplique diferentes reglas de seguridad que a los archivos servidos desde un servicio web.
Por ejemplo, si abre archivos locales desde una ubicación como C:/MyDocuments/weboot/index.htm
(Windows) o /Users/joe/Sites/index.html
(Mac) en su navegador, su solicitud AJAX podría no funcionar, incluso con el encabezado especificado en la mayoría de los navegadores.
El Safari de Apple casi no aplica restricciones de dominios cruzados a los archivos abiertos localmente, pero Firefox es mucho más estricto con respecto a lo que permite, con Chrome en el medio. Ejecutar un servidor web localmente (ej. En http://localhost/
) es una buena idea para evitar comportamientos inesperados.
Además, otras bibliotecas que proporcionan funciones para manejar solicitudes Ajax (como AngularJS) pueden requerir que otros encabezados se configuren en el servidor de manera predeterminada. Por lo general, puede ver el motivo del error en una consola de depuración del navegador.
Puede agregar el siguiente encabezado a la solicitud de Ajax enviada en el cartero.
Content-Type application/json
X-Requested-With XMLHttpRequest
Captura de pantalla
Crédito a Orion