2010-09-23 14 views
10

Parece que las personas han tenido problemas con los encabezados Aceptar en el pasado, pero no estoy seguro de si mi problema está relacionado. Con jQuery 1.4.2, tengo problemas para obtener JSON con getJSON(). Puedo ver la solicitud/respuesta en Firebug y parece que el origen del problema es que el recurso en cuestión arroja resultados diferentes según el encabezado Aceptar. A pesar de que los documentos dicen que se debe establecer, en Firebug se muestra como "/" -, obviamente, quiero "application/json". ¿Es esto un error conocido? ¿Se supone que debo poner una bandera que no conozco?getJSON() de JQuery no configura correctamente el encabezado Aceptar?

ETA: La solicitud es a través del sitio, si eso es importante, pero estoy pasando un parámetro de consulta callback=? para que JQuery lo trate (con éxito) como JSONP. El servicio al que estoy llamando en este caso particular admite un parámetro de omisión de aceptar (&accept=application/json), así que lo tengo que trabajar de forma manual, pero todavía considero que el error del encabezado es extraño y esperaba poder solucionarlo. así que no me encuentro con esto de nuevo cuando trato con un servicio diferente que podría no ser tan indulgente. No tengo una manera fácil de copiar/pegar el código de mi entorno de desarrollo pero aquí está el quid:

$.getJSON(baseURL + "?item=" + itemNum + "&callback=?", function(data){ 
    console.log(data); 
} 

Como se puede ver, esto no es exactamente compleja, y debería (estoy 99 % seguro ...) dará como resultado que se envíe un XHR con un encabezado Aceptar de application/json. Como dije, eso no está sucediendo, por consola Firebug's Net. Si es importante, esto está en Firefox 3.6.8.

ETA De nuevo: para cualquiera que siga leyendo esto, sí, todavía está sucediendo, y no, no tengo ni idea de por qué. Como dije, simple llamada getJSON(), sintaxis realmente básica, sitio cruzado, tratada como JSONP porque incluye un parámetro de consulta de devolución de llamada. ¡Aún abierto a sugerencias!

+1

Muéstranos tu código y es posible que te ayudemos más. – Steven

+0

Tengo exactamente el mismo problema en Chrome 8. $ .getJSON ("url", función (datos) {}) está configurando el encabezado Aceptar en */* –

Respuesta

13

Esto no es un error.

Dado que su llamada es de dominio cruzado, su navegador no le permitirá realizar llamadas XHR (política de mismo origen). Internamente, jQuery está trabajando en torno a este uso de la "etiqueta <script> truco", para realizar la llamada entre dominios (esta es la idea detrás de la fundemental tipo de datos JSONP). Como la llamada se realiza con la etiqueta, simplemente no es posible que jQuery modifique la parte accepts del encabezado.

jQuery funciona de maravilla ocultando estos detalles, pero lamentablemente en este caso usted parece estar sujeto al Law of Leaky Abstractions.

+0

respuesta muy perspicaz –

2

Sin ver su código (que podría indicarnos una solución obvia), ¿puede intentar usar la función Ajax estándar y ver si obtiene resultados diferentes?

$.ajax({ 
    url: '/what.eva', 
    dataType: 'json', 
    data: '{}', 
    success: callbackFunc 
}); 

function callbackFunc(result) { 
    alert(result); 
} 
+0

He intentado con lo que sugeriste, reemplazando mi llamada a getJSON (detalles ahora enumerados en la pregunta principal) con una invocación de $ .ajax, y los resultados son exactamente los mismos. Me imagino que esto tiene que ser un error conocido, o tal vez solo sea que mi navegador es extraño, pero esto definitivamente va en contra del comportamiento esperado. – Coderer

2

Este es un error que se ha cerrado en el sitio web de jquery.

http://dev.jquery.it/ticket/6551

No parece ser una solución para este todavía.

+0

Wow, entonces alguien más tiene el problema, pero no se pueden reproducir, ¿entonces lo cerraron? Veré si puedo contribuir a ello, de alguna manera ... – Coderer

+0

En caso de que tenga curiosidad: el ticket se resolvió y la respuesta de Pete es la correcta, a pesar de que * se ve * como una solicitud AJAX "normal" (XHR), se implementa con una etiqueta dinámica '

  • 11. jQuery - .getjson VS JSON .ajax
  • 12. Jquery getJSON problemas de dominio cruzado
  • 13. jQuery getJSON que no pasa ningún valor al controlador
  • 14. jQuery getJSON con tiempo de espera
  • 15. getJSON devolución de llamada no disparar
  • 16. diferencia entre $ .getJSON() y $ .ajax() en jQuery
  • 17. Pasando datos JSON a .getJSON en jQuery?
  • 18. ¿Por qué la cookie jQuery no configura una cookie?
  • 19. Cómo establecer la codificación en .getJSON JQuery
  • 20. ¿Cómo se configura el Test Runner de Resharper 5.1 para aceptar los recursos compartidos de red?
  • 21. Consumir datos JSON sin jQuery (sans getJSON)
  • 22. $ .getJSON no funciona en IE
  • 23. $ .getJson no funciona en IE
  • 24. El recurso AngularJS no configura Content-Type
  • 25. evento Click no funciona correctamente en el plugin de jQuery
  • 26. ¿Cómo se configura Apache/PHP para aceptar barras en las cadenas de consulta?
  • 27. Problemas con jQuery getJSON usando archivos locales en Chrome
  • 28. HttpResponseException no aceptar HttpStatusCode
  • 29. jQuery offset top no funciona correctamente
  • 30. jQuery en la consola no funciona correctamente