2017-02-14 3 views
0

Ich habe etwas Javascript, das eine XMLHttpRequest an eine PHP-Datei sendet. Diese PHP-Datei sendet eine Antwort, und JavaScript soll eine URL erstellen und umleiten, wobei der Antworttext als Parameter verwendet wird. In allen anderen Browsern funktioniert es gut, aber Firefox wird den Antworttext in der URL nicht enthalten.XMLHttpRequest sendet URL als Antworttext, Firefox leitet nicht um

Dies ist Javascript Beispiel:

var xhr = new XMLHttpRequest(); 
xhr.open('POST', 'filename.php', true); 
xhr.onreadystatechange = function(e){ 
    var id = e.currentTarget.responseText; 
    var urlWithId = "restofurl?id=" + id; 
    window.location.href = urlWithId; 
} 
xhr.send(fd); 

und filename.php ist nur eine Zahl im Moment:

<?php 
    echo "3"; 
?> 

ich andere Teile der URL versucht haben, setzen (bis auf die gesamte URL) im PHP-Teil, und Firefox schneidet immer genau diesen Teil aus. Ich habe auch versucht, die Antwort mehrmals auf verschiedene Variable zu kopieren, es Zeichen für Zeichen zu kopieren, es in eine Funktion zu setzen, die nur die Eingabe wieder zurückgibt, ...

Dies wird nur auf meinem eigenen Computer sein, so Ich brauche mir keine Sorgen um irgendwelche Sicherheitsprobleme zu machen, deshalb suche ich meistens nach einer einfachen Möglichkeit, um dies zu betrügen, anstatt wie es professionell gemacht wird. Hat jemand eine Idee?

+1

Onreadystatechange bedeutet nicht notwendigerweise, dass es getan wird, wenn es auslöst, tut es? – apokryfos

+0

Gibt es einen Fehler oder eine Meldung in der Firefox-Dev-Tool-Konsole? – k0pernikus

+1

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/onreadystatechange scheint eine alternative Möglichkeit anzugeben, den Antworttext zu erhalten. – apokryfos

Antwort

-1

Dies ist ein grundlegendes Beispiel, Sie müssen tatsächlich readyState Status testen. Wenn ich mich gut erinnere, ist es auch sicherer, die Ereignisfunktion vor dem Senden der Anfrage einzustellen (nicht wirklich sicher).

xhr = new XMLHttpRequest(); 

xhr.onreadystatechange = function() { 
    if (this.readyState == 4) { 
     //do something with this.responseText 
    } 
}; 
xhr.open("POST", url, true); 
xhr.send(); 

EDIT: Dies ist einer der Gründe, warum ich Frameworks verwenden, für die alte Browser-Unterstützung, aber dies ist keine Antwort. Um genau zu sein, in der Vergangenheit (Gegenwart?), Verwendet Browser exotische Funktionen zu implementieren. Es ist schon lange her, dass ich mich nicht darum gekümmert habe, XHR-Objekte direkt zu benutzen, das letzte Mal für Datei-Uploads mit Ladebalken (Canvas). Es zeigt Ihnen die grundlegende Art, mit einigen Dingen umzugehen. Das ist länger und ein wenig altmodisch, aber gut, es funktioniert.

function customXHR(){ 
    if(window.XMLHttpRequest){ 
     return new window.XMLHttpRequest; 
    }else{ 
     try{ //the weird ones 
      return new ActiveXObject("MSXML2.XMLHTTP.3.0"); 
     } 
     catch(ex){ 
      return null; 
     } 
    } 
} 

var xhr = customXHR(), pleaseStop = false, startDraw = false; 

if(xhr){ 
    xhr.addEventListener('load', function(e){ 
     var jsonRep; 
     if(!pleaseStop){ 
      //did use a JSON response 
      jsonRep = $.parseJSON(e.target.responseText); 
      //do the rest, we finished 
     } 
    }, false); 
    xhr.addEventListener('error', function(e){ 
     //error 
     pleaseStop = true; 
    }, false); 
    xhr.upload.addEventListener('progress', function(e){ 
     //why not let this as an example! 
     //file_size must be retreive separately, i fear 
     if(e.lengthComputable && file_size > 0 && !pleaseStop && startDraw){ draw_progress(e.loaded/file_size); } 
    }, false); 
    xhr.addEventListener('loadstart', function(e){ 
     //can be used too 
    }, false); 
    xhr.addEventListener('readystatechange', function(e){ 
     if(e.target.status == 404 && !pleaseStop){ 
      //error not found 
      pleaseStop = true; 
     } 
     if(e.target.readyState == 2 && e.target.status == 200){ 
      startDraw = true; 
     } 
     /*if(e.target.readyState == 4){ 
      //not used here, actually not exactly the same as 'load' 
     }*/ 
    }, false); 

    xhr.open("POST", url, true); 
    xhr.send(); 
} //else no XHR support 
+0

zu setzen Aaaaah danke! Das ist sinnvoll, weil der readyState mehrmals geändert wird, und nur das letzte Mal, dass tatsächlich eine Antwort vorliegt. Das erklärt auch, warum es immer die richtige URL druckt, wenn ich es einfach irgendwo auf der gleichen Seite erscheinen lasse, ohne es umzuleiten ... Jetzt wäre es interessant zu wissen, warum die anderen Browser das nicht getan haben. – LillaAnka

+0

Dies ist nur ein einfaches Beispiel, es hat nicht die größte Unterstützung (wenn Sie Retro-Kompatibilität wollen). Für den Browser-Einsatz wird es immer von der Javascript-Implementierung des Browsers selbst abhängen, es kann sogar nicht Standard sein. Beachten Sie, dass dieses Beispiel keine Fehlerzustände behandelt, ich werde dafür bearbeiten, wenn ich Zeit – Kaddath

+0

einen Beispielcode hinzugefügt habe, der zeigt, wie Sie Status, readyState und Ereignisse verwenden, um eine Antwort mit einer breiteren (längeren) Browserunterstützung zu behandeln – Kaddath

Verwandte Themen