2011-08-10 75 views
12

que estoy tratando de hacer una petición AJAXjquery ajax error { "readyState": 0 "responseText": "", "status": 0 "statusText": "error"}

$.ajax({ 
    type: "post", 
    url: "download.php", 
    error: function(data, status, err){ 
      alert(JSON.stringify(data)); 
     }, 
    data: "fileid="+fileid 
}); 

este solicitar alertas "{" readyState ": 0," responseText ":" "," estado ": 0," statusText ":" error "}"

He buscado en google todo lo que he encontrado es una cruz sitio llamada ajax (que obviamente no es)

He intentado poner la URL completa y hace lo mismo.

lo único que se me ocurre es el encabezado y no sé lo que podría estar mal. Aquí está el encabezado de la solicitud de Firebug

Host    www.mydomain.com 
User-Agent   Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0 
Accept    */* 
Accept-Language  en-us,en;q=0.5 
Accept-Encoding  gzip, deflate 
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Connection   keep-alive 
Content-Type  application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With XMLHttpRequest 
Referer    http://www.mydomain.com/ 
Content-Length  8 
Cookie    PHPSESSID=27b7d3890b82345a4fc9604808acd928 

he añadido otra solicitud en una página diferente y funciona muy bien, pero éste sigue fallando la cabecera de la otra solicitud es:

Host    www.mydomain.com 
User-Agent   Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0 
Accept    text/plain, */*; q=0.01 
Accept-Language  en-us,en;q=0.5 
Accept-Encoding  gzip, deflate 
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Connection   keep-alive 
Content-Type  application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With XMLHttpRequest 
Referer    http://www.mydomain.com/differentpage.php 
Content-Length  33 
Cookie    PHPSESSID=27b7d3890b82345a4fc9604808acd928 
+0

Por qué no estás examinando 'err'? ¿Qué le dijo Firebug sobre la solicitud y la respuesta? –

+0

Cuando envía un formulario falso a la misma página con la misma información, ¿qué ocurre? –

+0

err es una cadena en blanco y sí una forma falsa funciona bien, pero este ajax todavía no funciona –

Respuesta

4

me encontré con el mismo problema: cómo registrar cada vez que un usuario haga clic en el enlace.

El problema es que si de hecho no detiene el pop-up, la petición Ajax no se completa y se obtiene readyState: 0!

que he hecho otra versión de lo anterior que a lo mejor es más fácil de leer (aunque más detallado)

/* -------------------------------------------------------------------------- 
* Before that add 'downloads' class to every anchor tag (link) in your page 
* This script does the rest 
* 
* remember to change 'your_php_file' with the one you use 
* -------------------------------------------------------------------------- */ 

$(document).ready(function() 
{ 

    // Check if there is any link with class 'downloads' 
    if (typeof $('.downloads') != 'undefined') 
    { 
     var links = $('.downloads'); 

     // Run this for every download link 
     for (var i = 0; i < links.length; i++) 
     { 
      // Set click behaviour 
      links[i].onclick = function(e) 
      { 
       // Get download name 
       var attr = this.attributes, 
        href = attr.href.textContent, 
        elem = href.split('/'), 
        elem = elem[elem.length - 1]; 

       // Send the download file name and only after completing the request let the user download the file 
       $.ajax(
       { 
        type : "POST", 
        dataType : "text", 
        // 'your_php_file' must be an ABSOLUT or RELATIVE path! 
        url: your_php_file, 
        // 'elem' is a variable containing the download name 
        // you can call it in your php file through $_POST['download_name'] 
        data: { download_name: elem }, 
        // here we go magic: 
        // after the request is done run the popup for the download 
        complete: function() 
        { 
         window.location.href = href; 
        } 
       }); 

       // Stop default behaviour until ajax request has been done 
       e.preventDefault(); 
      }; 
     } 
    } 
}); 
1

El elemento que llamaba a esto una etiqueta de anclaje que llamaría esto, descarga un archivo exe y cuando el cuadro de diálogo de descarga descargaba esta solicitud, cancelaba esta solicitud como si navegase a una página nueva.

lo cambié a

function download(fileid, href) 
{ 
    $.post("download.php", {task: "download", fileid: fileid}, function(data){ 
     window.location.href = href; 
    }); 
} 

<a onclick="download(1, file.exe);return false;" href="file.exe">Download</a> 
0

que estaba recibiendo el mismo error:

"readyState: 0" 
"responseText: undefined" 
"status: 0" 
"text status: error" 
"error: " 

En mi caso, una Firefox Browser funciona perfectamente y otro navegador Firefox con la misma versión me estaba dando este error sin siquiera hacer la llamada ajax.

La solución fue la de desactivar una Adblocker complemento en mi navegador.

0

acabo de pérdida de 3 horas de mi tiempo hasta que encontré lo que estaba causando a fallar con ajax readyState: 0 en mi caso.

El problema era debido al uso de la aplicación en la memoria caché. En el manifiesto-archivo que faltaba

Network: *

Esto impidió que la página solicitada se cargue, sin ningún mensaje de error significativo. Aunque esta puede no ser la razón por la que ajax falla en la mayoría de los casos, espero que al menos algunas personas cometan el mismo error.

Cuestiones relacionadas