2012-03-23 9 views
20

Tengo problemas para configurar XHR responseType en "json". Funciona bien si lo dejo una cadena vacía xml.responseType = ""; pero cuando me puse a "json" Tengo la consola de errores de mensajes SYNTAX_ERR: DOM Excepción 12.XMLHttpRequest responseType = "json" dando el error SYNTAX_ERR: DOM Exception 12

El archivo .js:

var xml = new XMLHttpRequest(); 
xml.open("GET", "test.php", true); 
xml.responseType = "json"; 
xml.send(); 

El. archivo php:

<?php 
$foo = "{\"key1\":\"val1\", \"key2\":\"val2\"}"; 
echo $foo; 
?> 

No estoy seguro de lo que está pasando ... ¿Alguna idea?

+0

Ok .. después de más pruebas, aceptará todos los valores mencionados [aquí] (https: // desarrolladores. mozilla.org/en/XMLHttpRequest) ("documento", "blob", "arraybuffer", "text", "") EXCEPTO para "json". Lo probé en Chrome 17 y Safari 5.1 – alnafie

+0

También recuerde que, al enviar información desde un servidor ponga un tipo de mime de contenido apropiado en la devolución. encabezado ("Content-Type: application/json"); debería arreglar el problema Además, debería usar json_encode en lugar de crear el json usted mismo. imprimir json_encode (array ("key1" => "val1", "key2" => "val2")); – Rahly

+0

A partir de marzo de 2014, responseType = "json" es compatible con Chrome y Firefox más recientes, así como con Opera. – Kay

Respuesta

23

responseType propiedad de XMLHttpRequest objeto se añade en su nueva variante XMLHttpRequest Level 2 y que se incluye en HTML 5, no estoy seguro de todos los navegadores soportan este método por lo que podría ser posible que esté utilizando un navegador que no implementar ese método

en lugar de utilizar responseType puede utilizar siguiente código para obtener los datos en el formato deseado

var xml = new XMLHttpRequest(); 
xml.open("GET", "test.php", true); 

xml.onreadystatechange = function() { 
    if (xml.readyState != 4) { return; } 

    var serverResponse = JSON.parse(xml.responseText); 
}; 

xml.send(null); 
+0

o use eval (xml.responseText) para estar seguro –

+16

no recomendaría usar eval, porque hacer eval en el usuario no es seguro, si quiere asegurarse de que esto funcionará incluso si el navegador nativamente no admite el análisis JSON, entonces puede usar la biblioteca como esto http://www.json.org/js.html, pero gracias por los comentarios :) –

+1

También puede rodear la llamada 'JSON.parse' en un bloque' try-catch' para ver si 'responseText 'propiedad se analizó correctamente como JSON válido. –

8

El tipo de respuesta JSON no está implementado en WebKit. http://groups.google.com/a/chromium.org/group/chromium-bugs/browse_thread/thread/8107e50e4207eb5a/a5d2c31247feae56?lnk=raot

Actualización 2016-01-03: Como era de esperar, WebKit ha implementado esta función mientras tanto.

+3

El tipo de respuesta JSON se implementó recientemente en Chromium: http://src.chromium.org/viewvc/blink?view=revision&revision=156290 – kamituel

+0

Esta función se lanzó con Chrome 31 en noviembre de 2013. – Nayuki

Cuestiones relacionadas