En general, sí, necesitaría usar JSONP para realizar una solicitud entre dominios o entre protocolos para adherirse a la política del mismo origen.
ofrecer una alternativa al uso de Conjunto de la cabecera Access-Control-Allow-Origen "*" que no es compatible en todos los navegadores, están sujetas a cambio, etc.
Usted puede usar PHP u otro del lado del servidor lenguaje de programación para emular una respuesta del mismo origen desde un origen o protocolo diferente solicitando un script php del mismo origen (local) en su URL ajax.
En el caso de PHP y jQuery, estos son algunos ejemplos genéricos.
Ambos métodos a continuación son controvertidos, propensos a errores y están sujetos a ataques de scripts entre sitios, como es el conjunto de encabezado Access-Control-Allow-Origin "*"!
Así que asegúrese de formatear su propio token de CSRF o clave, escape de cualquier forma de entrada del usuario que se suministre, o utilice un marco para estandarizar solicitudes/respuestas para protegerse de los ataques.
También hay una sobrecarga asociada a la solicitud de página adicional que el servidor necesita para recibir los datos externos, pero es más confiable que esperar que el cliente y el servidor admitan el encabezado Set Access-Control-Allow-Origin "* "
Envíe una solicitud local a un script del lado del servidor y espere json como respuesta.
HTML
<script type="text/javascript">
$.ajax({
type: 'get',
url: '/get_cross_domain.php',
dataType: 'json',
data: {
'foo' = 'bar'
},
success: function(data){
console.log(data);
}
});
</script>
obtener los datos de un dominio o protocolo diferente para proporcionar a la petición local.
La respuesta aparece interna mientras que los datos reales proceden de una fuente externa.
get_cross_domain.php (Curl)
<?php
//initial output buffer
ob_start();
$ch = curl_init();
$options = array(
CURLOPT_URL => 'https://example.com/json_source.js',
CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
curl_close($ch);
$json = $response;
//send nothing but the json response
ob_start();
header('Content-Type: application/json');
echo $json;
ob_flush();
//discard anything other than our json response.
while(ob_get_level > 0){
ob_end_clean();
}
exit;
El método rizo le da mucho más control sobre las opciones, como ser capaz de definir la URL de referencia y hacer caso omiso de CA no válido, etc.
get_cross_domain.php (incluir)
<?php
//requires allow_url_include=1 in php.ini
ob_start();
include('https://example.com/json_source.js');
$json = ob_get_clean();
header('Content-Type: application/json');
echo $json;
exit;