He creado una API que devuelve los datos en json, y ahora estoy creando una aplicación para probar el API por recibir los datos y el uso de la página. Sin embargo, mi código de ajax se (abajo) falla por alguna razón, y el error que dice «error» (Error: error).

Lo que puede estar mal con el código?

el código:

    $.ajaxSetup ({
      url: "http://localhost:8000/products", //<--- returns json
      type: "GET",
      headers:{
        "Accept":"application/json",
        "Content-type":"application/x-www-form-urlencoded"
      }
    })
    $.ajax({
        success: function(data){
            console.log("You made it!");
        },
        error: function(xhr) {
           console.log("Error: " + xhr.statusText);
       }
    }).done(function(data){
        console.log(data);
    })

Esta es la info que me meto en Chrome (Inspector -> Red):

Nombre: productos localhost/, Método: OBTENER, Estado: (cancelado), Tipo: Pendiente, Iniciador: jquery-la última.js:8434 Script, Tamaño: 13B 0B, Tiempo: 95ms 0.0 días

qué consigue el éxito o el hecho.
Ninguno de ellos, me da error.
y una cosa más que la url devuelve el json datos codificados.
Podría usted echa un vistazo a las Herramientas para Desarrolladores de Chrome pestaña llamada «Red» y pegar el resultado de la llamada aquí? Sospecho que la respuesta del servidor puede ser el problema. También, hizo que cancelar la solicitud, como Pavel Hodek sugerido en su respuesta?
Cosa segura. Voy a actualizar mi pregunta con esta información!

OriginalEl autor holyredbeard | 2012-12-15

5 Comentarios

  1. 5
    $.ajax({
        /* ajax options omitted */
        error: function (xmlHttpRequest, textStatus, errorThrown) {
             if(xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0) 
                  return;  //it's not really an error
             else
                  //Do normal error handling
    });
    Atención para explicar tu respuesta?
    Error con el estado o readyState == 0 puede ocurrir cuando usted cancela la petición ajax antes de que finalice, o cuando se vaya a otra página o al actualizar la página. Detalle de la información de error se puede obtener a partir de la primera o tercera parámetro – tratar de registro a la consola usando console.log(...) a ver qué pasa.
    Ok, parece razonable. Me pregunto si este es el caso de la OP.
    He probado tu código y readyState y el estado fue de 0, por lo que no «real» de error, a continuación, supongo?
    Creo que no hay error entonces. Trate también de comprobar la respuesta con Firebug (extensión de Firefox) o con Fiddler o con Herramientas de Desarrollador de Chrome – usted no puede ver los datos que se aproxima como Respuesta. Si todo funciona y los datos son correctos, entonces no se produce ningún error.

    OriginalEl autor Pavel Hodek

  2. 9

    Lo que es probablemente el problema

    Creo conocer su problema aquí. Aparentemente se carga una página de un cierto protocolo+dominio+puerto (por ejemplo. «http://localhost/«), pero, a continuación, invocar petición AJAX a un protocolo diferente, de dominio o el puerto (en este caso probablemente sólo el puerto es diferente: «http://localhost:8000/products").

    De esta manera usted probablemente está golpeando Mismo Origen De La Política De limitación, que es la característica de seguridad de su navegador. En tales casos, los navegadores pueden indicar que se concreta su solicitud ha sido «cancelado» (porque el navegador bloqueado).

    Solución

    Hay varias soluciones a su problema:

    • (más fácil) se adhieren a la misma protocolo+dominio+puerto, tanto para el sitio original y el extremo solicitado por AJAX,
    • (segundo sencillo) construir un punto final en el servidor, por lo que por ejemplo. «http://localhost/products» llame «http://localhost:8000/products» en el fondo y volver a su respuesta (como una vuelta para SOP),
    • algunas soluciones más complejas como JSONP, CORS, etc. (más aquí: https://stackoverflow.com/a/8467697/548696),

    OriginalEl autor Tadeck

  3. 2

    Trate de usar sólo

    $.ajax({
      url: "http://localhost:8000/products", 
      dataType: 'json',
      success: function(data){
                console.log("You made it!");
            },
            error: function(xhr) {
               console.log("Error: " + xhr.statusText);
           }
    });

    Lugar de usar hecho de devolución de llamada , usted puede utilizar la línea de código en el interior de éxito o completa de devolución de llamada. Es bastante simple y limpio.

    Gracias, estoy de acuerdo en que es mucho más limpio. Aunque el problema sigue siendo – el error que se produce.

    OriginalEl autor Sudhanshu Yadav

  4. 0

    ¿Por qué no probar y combinar las dos llamadas ajax en uno. y también intentar cambiar type = "POST"

    $.ajax({
        type: "POST",
        url: "http://localhost:8000/products",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data){alert(data);},
        error: function(errMsg) {
            alert(errMsg);
        }
    });
    «dos llamadas ajax en uno«? Hay sólo una llamada. Si usted está hablando acerca de la invocación de $.ajaxSetup(), entonces tal vez OP quiere utilizar en el futuro (como la simplificación del código mediante la aplicación de principio SECO).
    Gracias por la info.yo no lo sabía 🙂
    BTW $.ajaxSetup() no hacer ninguna llamada ajax, es la instalación de ajax sólo módulo.

    OriginalEl autor Moiz

  5. 0

    Creo que su navegador almacena en caché el error, o puede ser que hay problemas en la configuración de encabezados correctamente, así que trate de añadir esta manera en el $.ajaxsetup():

        $.ajaxSetup ({
          url: "http://localhost:8000/products", //<--- returns json
          type: "GET",
          dataType: 'json',
          cache: false,
          contentType: "application/json"
        });

    trate de esta manera una vez y ver si funciona.

    Todavía obtiene un error, sin embargo, la dirección URL se pone algo diferente en la consola al añadir esa línea: OBTENER localhost:8000/productos?_=1355580034481 (el signo de interrogación y todos los números es agregado).

    OriginalEl autor Jai

Dejar respuesta

Please enter your comment!
Please enter your name here