我嘗試使用XMLHttpRequest一個新手。我研究了遍佈互聯網的大量例子。使用GET方法沒有問題,但是當我嘗試切換到POST時,它無法傳輸參數。 :(XMLHttpRequest的POST方法PHP服務器沒有收到post數據,但得到精細
這裏是我的精簡例子複製的問題:
的Javascript:
function GetPostTest(url)
{
var req = null;
var postParms = 'p1=x&p2=y';
var getParms = '';
getParms = 'g1=a&g2=b';
if (getParms) url += '?'+getParms;
req = new XMLHttpRequest
if (req)
{
req.open('POST', url, true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", postParms.length);
req.setRequestHeader("Connection", "close");
req.onreadystatechange = function()
{
if (req.readyState == 4 && req.status == 200)
{
alert('Got Stuff Back: ' + req.responseText);
}
}
req.send(postParms);
}
}
服務器:
<?php
foreach ($_POST as $key=>$value) echo htmlspecialchars(' _POST['.$key.']=['.$value.']');
foreach ($_GET as $key=>$value) echo htmlspecialchars(' _GET['.$key.']=['.$value.']');
foreach ($_REQUEST as $key=>$value) echo htmlspecialchars(' _REQUEST['.$key.']=['.$value.']');
exit;
?>
在這個例子中,服務器只報告回所有的它接收到的GET和POST參數,然後顯示在警告框中,我在那裏也拋出了幾個GET參數,我通過的參數是:
- GET:G1 =一個& G2 = B
- PUT:P1 = X & P2 = Y
警報對話框顯示:「得到的東西返回:_GET [G1] = [一] _GET [g2] = [b] _REQUEST [g1] = [a] _REQUEST [g2] = [b]「。這告訴我,它發送到服務器沒關係,回來沒關係,只是POST變量沒有通過。
我關掉getParms所以我只發送POST參數,然後我看不出有什麼變數。我關閉了三個setRequestHeader()或我在示例代碼中看到的其他變體的任何組合,並且它不會改變任何內容。
我使用Google Chromium版本24.0.1312.56 Ubuntu 11.10(24.0.1312.56-0ubuntu0.11.10.1)和Apache在Xubuntu 2.2.20-1ubuntu1.3上使用PHP進行測試。
感謝您的分析。如何解決這個問題以推送POST參數?
JavaScript適合我。如果你打開chrome開發工具(推F12),然後運行你的javascript,chrome dev工具會報告正確發送的頭文件(你可以在Network下查看XHR,然後點擊請求並查看頭文件) – dsas 2013-03-07 00:15:55
工作過我也在FF19和Chrome25上。可能是在同一頁面上的其他JS?或者也許刪除這條線只是爲了測試? req.setRequestHeader(「Connection」,「close」); – 2013-03-07 00:45:34
謝謝dsas和Scott Yang。你的評論導致我走上了答案的道路。 看着網絡 - 在Chromium開發人員工具上的XHR,我看到它發送一個POST,重新獲得301「永久重定向」,然後重試它作爲一個GET。我在我的Apache配置中發現它重定向非GET請求的目錄不以斜線結尾。在網址的末尾添加斜槓解決了問題。由於我是一個沒有聲譽的新手,我無法回答我的問題8個小時,所以我只能留下評論。 – Dave 2013-03-07 01:05:28