2011-06-28 28 views
5

Tiene un cuadro de autocompletar simple (jquery ui) que obtiene su fuente de un servicio web. El código es algo parecido a continuación:La solicitud de Jquery JSONP obtiene 200 respuestas con datos pero contiene el error

var autocompleteOptions = { 
    source = getDataFromService, 
    minLength: 3 
}; 

var getDataFromService = function(request, response) { 
    var ajaxOptions = { 
     url: "http://myservice:1234/somedata/", 
     dataType: "jsonp", 
     data: "someVariable = " + request.term, 
     success: function(data) { alert("data"); }, 
     error: function(xhr, description, error) { alert("failed"); } 
    }; 

    $.ajax(ajaxOptions); 
} 

$(someSelector).autocomplete(autocompleteOptions); 

Buscando en violinista e incluso en el panel de Firebug para Firefox, puedo ver que el JSON se devuelve correctamente, y la respuesta del servidor es un 200. Incluso he comprobado el jsonp creado fragmento de script, que también contiene el JSON correcto. Sin embargo, siempre golpea la función de error, no la de éxito.

También he intentado utilizar completar y obtener los datos de la xhr manualmente, sin embargo, el responseText y responseXml no están definidos. El error contenido dice error de análisis, pero todo parece ser sintácticamente correcto json, ya que el panel Firebug y el violín ambos lo muestran bien.

HTTP/1.1 200 OK 
Server: ASP.NET Development Server/9.0.0.0 
Date: 28 Jun 2011 11:17:04 GMT 
X-AspNet-Version: 2.0.50727 
X-AspNetMvc-Version: 2.0 
Cache-Control: private 
Content-Type: application/json; charset=utf-8 
Content-Length: 29 
Connection: Close 

[{"id":"1", "somevar":"hello"}] 
+1

Se puede publicar el JSON en cuestión? Si obtiene un "error de análisis", debe haber un motivo ... – Pointy

+0

Agregará la salida sin procesar a mi publicación original si ayuda – somemvcperson

+0

¿Qué está viendo en el cuadro de alerta cuando finaliza la llamada AJAX? ¿O no está alertando? – MoarCodePlz

Respuesta

5

Eso JSON no es correcta,

[{"id":"1", somevar:"hello"}]

necesidades sean

[{"id":"1", "somevar":"hello"}]

JSON requiere comillas dobles.

http://jsfiddle.net/robert/Y6ypV/

Un valor puede ser una cadena entre comillas dobles, o un número, o verdadera o falsa o nula, o un objeto o una matriz. Estas estructuras se pueden anidar.

llevan desde: http://www.json.org/

+0

error tipográfico, solo estaba copiando desde otra máquina, contiene correctamente las citas alrededor de los datos en la otra máquina. Actualizaré mi publicación. – somemvcperson

+0

http://jsonlint.com/ es un gran validador de json - lo he usado hoy :-) –

+0

No sabía que había una jsonlint, estoy usando jslint en mi canalización de compilación ... voy a revisar el json allí ahora. .. * EDIT * Valid json – somemvcperson

Cuestiones relacionadas