jQuery AJAX JSON dataType Conversion

Esperemos que ese título no sea demasiado críptico. Lo que sucede es que tengo un script jQuery AJAX que trato de usar para acceder a una API en un servidor remoto, que devuelve una respuesta JSON. Sin embargo, la API devuelve el JSON como tipo MIME “text / html” (en el encabezado de respuesta) en lugar de “application / json”. Parecería obvio que simplemente necesito cambiar el tipo de contenido devuelto de texto a JSON para que la llamada AJAX interprete los datos correctamente.

Por desgracia, este no es el caso. He intentado esto en una multitud de maneras diferentes, todas las cuales fallan. Lo más cerca que he estado de hacer que esta llamada a la API funcione es cuando el depurador me dice “Recurso interpretado como Script pero transferido con texto / html de tipo MIME”. Y los errores de llamada AJAX con mi mensaje de depuración que vuelca el objeto jqXHR en formato JSON, que me dice: {"readyState":4,"status":200,"statusText":"parsererror"}

Aquí hay un ejemplo de mi código (aunque he cambiado el código de varias maneras, en mis bashs de hacerlo funcionar, pero esta versión parece ser la más cercana a la correcta):

 $.ajax({ type: 'GET', url: 'http://username:api-key@www.kanbanpad.com/api/v1/projects.json', contentType: 'application/json', dataType: 'jsonp', converters: { 'jsonp': jQuery.parseJSON, }, success: function(data) { alert(data); }, error: function(jqXHR, textStatus, errorThrown) { console.log(JSON.stringify(jqXHR)); console.log(textStatus+': '+errorThrown); } }); 

Si alguien puede descubrir qué debo hacer de manera diferente para hacer que esto funcione, estaré extremadamente agradecido.

También puede valer la pena tener en cuenta que si copia / pega la URL de la API en una barra de direcciones del navegador y pulsa go, da la respuesta JSON adecuada con el encabezado de respuesta adecuado (“application / json”)

Entonces, a menos que Kanbanpad actualice su API, no se puede acceder directamente con JS. Tendrá que usar PHP (o algún otro) para manejar las solicitudes.

Funciona igual de bien, solo requiere un paso extra, eso es todo.

Sólo para cualquier persona que se busca una solución.

  dataFilter(data, type)Function A function to be used to handle the raw response data of XMLHttpRequest. This is a pre-filtering function to sanitize the response. You should return the sanitized data. The function accepts two arguments: The raw data returned from the server and the 'dataType' parameter. 

Cambiaría el tipo de contenido en el interceptor dataFilter a json. Tenga en cuenta que esto afecta a todas las llamadas ajax, así que use la información de los datos para decidir cuáles desea convertir.

Verifique que su servidor esté enviando una respuesta jsonp. Esto significa que el json debe estar incluido con una cadena de su callback.

El nombre de la callback se pasa en los parámetros y, si no lo configura de forma explícita, se parece a algo como: jQuery15102810791094068532_1300988427891 (según http://www.json-p.org/ )

En el servidor, es necesario formatear la respuesta:

 jQuery15102810791094068532_1300988427891({...json response ...}); 

Donde utiliza la callback definida en su parámetro GET ‘callback’.

Puede intentar establecer el tipo en “json” y ver si funciona. He tenido varios analizadores con el jsonp de jQuery, puedes probar http://code.google.com/p/jquery-jsonp hasta que sea un poco más suave.

Intenta cambiar tu tipo de contenido a este

  contentType: "application/json; charset=utf-8",