Pergunta

Eu estou tentando obter esta função para trabalho, que faz um pedido de parâmetro url seguida, envia o responseText para callback que é uma função.

Parece que ele só fica a readyState 1 (graças aos comandos Firebug).

Aqui está:

function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
    return false;
}
httpRequest.onreadystatechange = function(){
    console.log(httpRequest.readyState);
    if (httpRequest.readyState == 4) {
        callback(httpRequest.responseText);
    }
};
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
Foi útil?

Solução

Eu contornado este problema atribuindo evento onload em vez de onreadystatechange:

function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
        return false;
}

var readyStateChange = function(){
    console.log(httpRequest.readyState);

    if (httpRequest.readyState == 4) {
                callback(httpRequest.responseText);
    }
};


if (isFirefox && firefoxVersion > 3) {
    httpRequest.onload = readyStateChange;
} else {
    httpRequest.onreadystatechange = readyStateChange;
}

console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}

Outras dicas

Verifique se o URL em questão faz realmente responder, visitando-o diretamente no navegador.

Test com um navegador diferente você obter o mesmo resultado.

Use algum tipo de HTTP monitorar para assistir o cliente a conversa servidor (o meu favorito é Fiddler )

Possivelmente o pedido Ajax não retorna dados (assim, um erro do lado do servidor de algum tipo). Tente habilitar a opção 'Mostrar XMLHttpRequests' no console do Firebug, para verificar isso.

Eu também enfrentou o mesmo problema. Ao ler a url abaixo, eu tenho o meu resolvido.

http://bytes.com/topic/javascript / respostas / 548442-ajax-readystate-1-wall

Basicamente, quando eu atribuo a minha função como o ouvinte de evento para httpRequest.onreadystatechange, não posso passar qualquer variável a ele. SO que eu tenho para incorporar a variável dentro da cadeia HTTP POST para o servidor back-end, em seguida, recuperá-lo a partir da resposta HTTP.

Ele funciona muito bem para FF 3. Não há necessidade de usar jQuery.

Eu tive o mesmo problema no Firefox, mas não no Chrome.

O problema era a minha resposta teve o conjunto mime-type para "Application / octet-stream".

alterá-lo para "text / html" fez funcionar no Firefox também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top