2 Stimmen

PHP AJAX-Proxy liefert keinen Body für POST-Anfragen

Ich verwende diesen AJAX-Proxy für domänenübergreifende AJAX-Anfragen: http://www.daniweb.com/code/snippet494.html . Es funktioniert gut, wenn ich GET verwende. Aber wenn ich versuche, POST zu verwenden, scheint der Textkörper verloren zu gehen und wird nie ausgedruckt. Ich habe versucht, das Protokoll auszudrucken und den Code zu studieren, aber ich kann nicht herausfinden, was falsch läuft.
Danke,
Isaac Waller

Edit : Hier ist der Code, den ich verwende:

$.post("proxy.php?proxy_url=http://www.google.com", { postvar1: "hello", postvar2: "goodbye" },
  function(data){
    alert(data);
  },"text");

Selbst wenn ich ein einfaches Formular erstelle und es damit teste, ergibt sich keine Ausgabe.

3voto

Lucky Punkte 636

Versuchen Sie dies:

$.post("/proxy.php", {proxy_url: "http://www.google.com", postvar1: "hello", postvar2: "goodbye" },
  function(data){
    alert(data);
  },"text");

Als ich Ihre ursprüngliche Version ausprobierte, kam eine Fehlermeldung 405 zurück, aber die obige Version funktioniert. Entweder JQUERY oder proxy.php ist nicht glücklich über die Vermischung von post und get Parametern.

EDIT:

Ich habe zwar eine Seite zurückbekommen, die ich in der Alert-Box anzeigen konnte, aber sie sieht nicht so aus, wie ich es erwartet hätte. Ich habe denselben Code auf einigen Websites mit Kontaktformularen ausprobiert, und es hat wie erwartet funktioniert.

1voto

Don Wilson Punkte 559

Ersetzen Sie alle $_GET-Variablen in Ihrer PHP-Datei durch $_REQUEST.

0voto

pvoosten Punkte 3087

Möglicherweise stimmt etwas mit dem Skript proxy.php nicht, so dass es nur etwas zurückgibt, wenn GET verwendet wird. Vielleicht erhalten Sie die Anfragedaten von $_GET statt von $_REQUEST im php-Skript? Oder vielleicht antwortet Google einfach nicht auf POST-Anfragen. In diesem Fall sollten Sie POSTs in GETs umwandeln.

Off-topic: Achten Sie darauf, dass Sie nicht als Proxy für alles im Web fungieren, wenn Sie nur für einige vertrauenswürdige Domains proxy sein wollen.

0voto

Josh Stodola Punkte 79569

Ändern Sie diese Zeile...

$proxy_url = isset($_GET['proxy_url'])?$_GET['proxy_url']:false;

Zu diesem...

$proxy_url = isset($_GET['proxy_url']) ? $_GET['proxy_url'] : (isset($_POST['proxy_url']) ? $_POST['proxy_url'] : false);

Damit wird das serverseitige Problem behoben.

Wenn Sie die Anfrage jedoch über jQuery stellen, müssen Sie entweder GET oder POST wählen. Derzeit verwenden Sie eine Kombination aus beidem, indem Sie die Proxy-URL per Query-String zusätzlich zu den Posting-Parametern übergeben. Dies wird fehlschlagen, aber es ist leicht zu beheben...

$.post("/proxy.php", {proxy_url: "http://www.google.com", foo: "bar" }, function(dat) {
  alert(dat);
});

-1voto

Jonathan Fingland Punkte 54655

Bitte posten Sie das html/javascript auf Ihr Seite, die fehlerhaft ist.

Das Skript, auf das Sie verweisen, erwartet Parameter im Query-String, $_GET, und optional Parameter in post, die es lediglich weitergibt.

Wenn Sie das Skript nicht geändert haben, wird es nicht funktionieren, wenn Sie die Informationen nicht in der Abfragezeichenfolge haben.

Sie können jedoch sowohl "get" als auch "post" in der gleichen Anfrage haben.

z.B..

var http = new XMLHttpRequest();
var url = "http://example.com/proxy.php?proxy_url=http://www.google.com";
var params="postvar1=hello&postvar2=goodbye";
http.open("post", url, true);
http.onreadystatechange = function() {
    alert("finished");
}
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.send(params);

Beachten Sie, dass die verwendete URL Query-String-Parameter enthält UND post mit Parametern verwendet

oder in jQuery:

$.post("proxy.php?proxy_url=http://www.google.com", { postvar1: "hello", postvar2: "goodbye" },
  function(data){
    alert(data);
  },"text");

oder in Prototyp:

 var http = new Ajax.Request("proxy.php?proxy_url=http://google.com", 
     { method: "post", 
       parameters: { postvar1:"hello", postvar2: "goodybe"}, 
       onSuccess: function(text) { alert(text);}
     });

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X