error - jquery ajax post
jquery ajax obtener responsetext de http url (9)
Ninguno:
var response = $.ajax({
type: "GET",
url: "http://www.google.de",
async: false,
success : function() {
alert (this);
}
});
Ni:
var response2 = $.get("http://www.google.de", function(data) {
alert("Data Loaded: " + data);
});
dame un objeto ¿Cómo obtengo acceso al responseText
?
Como dijo Karim, el dominio cruzado ajax no funciona a menos que el servidor lo permita. En este caso, Google no lo hace, PERO, hay un truco simple para solucionar esto en muchos casos. Simplemente haga que su servidor local pase el contenido recuperado a través de HTTP o HTTPS.
Por ejemplo, si estuvieras usando PHP, podrías:
Cree el archivo raíz_web / ajax_responders / google.php con:
<?php
echo file_get_contents(''http://www.google.de'');
?>
Y luego modifique su código para conectarse a ese en lugar de al dominio de Google directamente en el javascript:
var response = $.ajax({ type: "GET",
url: "/ajax_responders/google.php",
async: false
}).responseText;
alert(response);
Dado que las solicitudes de jQuery AJAX fallan si son de dominio cruzado, puede utilizar cURL (en PHP) para configurar un servidor proxy.
Supongamos que un archivo PHP responde.php tiene estos contenidos:
$url = "https://www.google.com";
$ch = curl_init( $url );
curl_set_opt($ch, CURLOPT_RETURNTRANSFER, "true")
$response= curl_exec( $ch );
curl_close( $ch );
return $response;
Su solicitud AJAX debe estar en este archivo respondedor.php para que ejecute la solicitud de dominio cruzado.
En las funciones de jquery ajax, la firma de devolución de llamada correcta es:
function (data, textStatus) {
// data could be xmlDoc, jsonObj, html, text, etc...
this; // the options for this ajax request
}
Dependiendo del tipo de datos que haya solicitado, utilizando el parámetro ''dataType'', obtendrá el argumento ''datos''.
de los documentos:
dataType (String) Predeterminado: Intelligent Guess (xml o html). El tipo de datos que espera recibir del servidor. Si no se especifica ninguno, jQuery pasará inteligentemente responseXML o responseText a su devolución de llamada exitosa, según el tipo MIME de la respuesta.
Los tipos disponibles (y el resultado pasado como primer argumento para su devolución de llamada exitosa) son:
"xml": devuelve un documento XML que se puede procesar a través de jQuery.
"html": devuelve HTML como texto sin formato; Las etiquetas de script incluidas se evalúan cuando se insertan en el DOM.
"script": evalúa la respuesta como JavaScript y la devuelve como texto sin formato. Deshabilita el almacenamiento en caché a menos que se use la opción "caché". Nota: Esto convertirá los POST en GET para solicitudes de dominio remoto.
"json": evalúa la respuesta como JSON y devuelve un objeto JavaScript.
"jsonp": se carga en un bloque JSON utilizando JSONP. Agregará un extra "? Callback =?" hasta el final de su URL para especificar la devolución de llamada. (Añadido en jQuery 1.2)
"texto": una cadena de texto plano.
En realidad, puede realizar solicitudes de dominios cruzados con Firefox, por ejemplo, para obtener una descripción general: http://ajaxian.com/archives/cross-site-xmlhttprequest-in-firefox-3
Webkit e IE8 también lo soportan de alguna manera.
Esto es super viejo, pero espero que esto ayude a alguien. Estoy enviando respuestas con diferentes códigos de error y esta es la única solución que he encontrado que funciona en
$.ajax({
data: {
"data": "mydata"
},
type: "POST",
url: "myurl"
}).done(function(data){
alert(data);
}).fail(function(data){
alert(data.responseText)
});
Debido a que JQuery ha desaprobado las funciones de success
y error
, es necesario utilizar done
y fail
, y acceder a los datos con data.responseText
cuando fail
, y solo con data
cuando se done
. Esto es similar a la respuesta de @Marco Pavan, pero no necesita ningún complemento de JQuery ni nada para usarlo.
La única forma en que sé que le permite usar ajax cross-domain es JSONP ( http://ajaxian.com/archives/jsonp-json-with-padding ).
Y aquí hay una publicación que publica varias técnicas para lograr ajax de dominio cruzado ( http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide )
Primero tienes que descargar un complemento de JQuery para permitir las solicitudes de dominio cruzado. Descárguelo aquí: https://github.com/padolsey/jQuery-Plugins/downloads
Importe el archivo denominado query.xdomainsajax.js en su proyecto e inclúyalo con este código:
<script type="text/javascript" src="/path/to/the/file/jquery.xdomainajax.js"></script>
Para obtener el html de una página web externa en forma de texto, puede escribir esto:
$.ajax({
url: "http://www.website.com",
type: ''GET'',
success: function(res) {
var text = res.responseText;
// then you can manipulate your text as you wish
}
});
Simplemente debes reescribirlo así:
var response = '''';
$.ajax({ type: "GET",
url: "http://www.google.de",
async: false,
success : function(text)
{
response = text;
}
});
alert(response);
prueba esto
alert( data[''responseText''] );