PHP AJAX-прокси не возвращает тело для запросов POST - PullRequest
2 голосов
/ 27 июня 2009

Я использую этот прокси-сервер AJAX для междоменных запросов AJAX: http://www.daniweb.com/code/snippet494.html. Отлично работает, когда я использую GET. Но когда я пытаюсь использовать POST, тело кажется потерянным и никогда не распечатывается. Я попытался распечатать журнал и изучил код, но не могу понять, что идет не так.
Спасибо,
Исаак Уоллер

Редактировать: Вот код, который я использую:

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

Даже если я сделаю простую форму и протестирую ее без результатов.

Ответы [ 6 ]

3 голосов
/ 22 августа 2009

Попробуйте это:

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

Когда я попробовал вашу оригинальную версию, она вернулась с ошибкой 405, но вышеприведенное работает. JQUERY или proxy.php не рады смешивать сообщения и получать параметры.

EDIT:

Я вернулся на страницу, которую смог отобразить в окне предупреждения, но она не выглядит так, как я ожидал. Я пытался использовать тот же код на некоторых сайтах с контактными формами, которые публикуются, и он работал как положено.

1 голос
/ 25 августа 2009

Замените все переменные $ _GET в вашем PHP-файле на $ _REQUEST.

0 голосов
/ 25 августа 2009

Изменить эту строку ...

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

К этому ...

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

И это решит проблему на стороне сервера.

Однако, когда вы делаете запрос через jQuery, вам нужно выбрать либо GET, либо POST. В настоящее время вы используете комбинацию обоих, передавая URL прокси через строку запроса в дополнение к параметрам публикации. Это не удастся, но это легко исправить ...

$.post("/proxy.php", {proxy_url: "http://www.google.com", foo: "bar" }, function(dat) {
  alert(dat);
});
0 голосов
/ 25 августа 2009

Возможно, что-то не так со скриптом proxy.php, поэтому он возвращает что-то только при использовании GET. Может быть, вы получаете данные запроса от $ _GET вместо $ _REQUEST в сценарии php? Или, возможно, Google просто не отвечает на запросы POST. В этом случае вы можете перевести POST в GET.

Не по теме: будьте осторожны, чтобы не быть прокси для всего в Интернете, если все, что вам нужно, это прокси для пары доверенных доменов.

0 голосов
/ 01 августа 2009

Не верьте моему слову, но вы не можете использовать междоменный Ajax. Есть обходные пути, как описано в этой статье , но чистый ajax невозможен.

0 голосов
/ 27 июня 2009

пожалуйста, опубликуйте html / javascript на вашей странице, которая не работает.

Сценарий, на который вы ссылались, ожидает параметры в строке запроса, $ _GET и, необязательно, параметры в записи, которую он просто передает.

Если вы не изменили этот скрипт, он не будет работать, если у вас нет информации в строке запроса.

Однако вы можете получать и отправлять сообщения в одном запросе.

, например

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

обратите внимание, что используемый URL включает параметры строки запроса, И использует запись с параметрами

или в jQuery:

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

или в прототипе:

 var http = new Ajax.Request("proxy.php?proxy_url=http://google.com", 
     { method: "post", 
       parameters: { postvar1:"hello", postvar2: "goodybe"}, 
       onSuccess: function(text) { alert(text);}
     });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...