PHP AJAX vekil POST istekleri için vücut dönen değil

6 Cevap php


I am using this AJAX proxy for cross-domain AJAX requests: http://www.daniweb.com/code/snippet494.html. It works great when I use GET. But when I try to use POST, the body seems to get lost and is never printed out. I tried printing the log and studied the code but I cannot figure out what is going wrong.
Thanks,
Isaac Waller

Edit: İşte kullanıyorum kodu:

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

Ben basit bir form yapmak ve hiçbir çıkış sonuçları ile test bile.

6 Cevap

Bu deneyin:

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

Ben orijinal sürümünü denedim, bu bir hata 405 ile geri geldi, ancak yukarıdaki çalışır. JQUERY veya proxy.php Ya sonrası karıştırma ve parametreleri almak konusunda mutlu değil.

EDIT:

Ben uyarı kutusunda görüntülemeyi başardı bir sayfa, geri aldın ama ben beklediğiniz gibi bir şey görünmüyor. Ben sonrası iletişim formları ile bazı sitelerde aynı kodu denedim, ve beklendiği gibi çalıştı.

$ _REQUEST Ile PHP dosyasında herhangi bir ve tüm $ _GET değişkenleri değiştirin.

GET kullanırken yalnızca bir şeyler verir, böylece proxy.php komut ile yanlış bir şey olabilir. Belki $ _GET den yerine php script $ _REQUEST gelen istek veri almak? Ya da belki Google sadece POST isteklerini cevap vermez. Eğer bu durumda GETler için mesajları çevirmek isteyebilirsiniz.

Off-topic: İstediğiniz tüm güvenilir etki bir çift için vekil için ise, web üzerinde her şey için bir vekil olmak için değil dikkatli olun.

Bu satırı değiştirin ...

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

Bu kadar ...

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

Ve bu sunucu tarafı sorunu çözecektir.

Eğer jQuery ile istek yaptığınızda Ancak, GET veya POST ya almak gerekir. Şu anda, parametreleri ilanıyla ek sorgu dizesi yoluyla vekil URL geçirerek hem bir arada kullanıyor. Bu başarısız olur, ama düzeltmek için kolay ...

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

başarısız your sayfa html / javascript gönderin.

Eğer başvurulan komut sorgu dizesi parametreleri, $ _GET, ve bu sadece geçirir yazı, isteğe bağlı parametreleri bekliyor.

Eğer senaryoyu değiştirilmiş sürece sorgu dizesinde bilgiler olmadıkça, bu iş olmaz.

Ancak almak ve aynı isteği gönderebilir hem de olabilir.

örneğin

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);

kullanılan url sorgu dizesi parametrelerini içerir VE parametreleri ile yazı kullanır fark

veya jQuery:

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

ya Prototip:

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

Sözümü yapmayız, ama cross-domain Ajax yapamaz. Orada this article tarif edildiği gibi çözümler vardır, ama saf ajax mümkün değildir.