2009-09-11 27 views
52

我想從我的html閱讀發佈請求參數。我可以在javascript中使用以下代碼讀取獲取請求參數。如何閱讀使用javascript的發佈請求參數

$wnd.location.search 

但它不適用於發佈請求。任何人都可以告訴我如何閱讀我的HTML使用javascript中的發佈請求參數值。

回答

108

POST數據是處理服務器端的數據。而且Javascript在客戶端。所以你無法使用JavaScript讀取發佈的數據。

+30

雖然結論是正確的(你無法從javascript獲取數據),但推理是錯誤的。客戶端(瀏覽器)首先將POST數據發送到服務器。所以客戶非常清楚這些數據是什麼。實際原因很簡單,就是瀏覽器不會將這些數據提供給javascript(但它完全可以)。 – GetFree 2013-06-12 23:23:32

+0

@GetFree:這個所謂的POST變量知識給Web開發人員有什麼好處?沒有一個Web開發人員會編寫一個客戶端腳本,這個腳本可能會使JavaScript的發佈數據可用,正如你指出的那樣,它*在實踐中從未發生過。因此,在現實世界*中,這裏給出的答案是正確的,也是我自己的。 – 2013-06-13 04:16:33

+26

@PlatinumAzure,我不確定你是否明白這一點。您說服務器中存在POST數據,並且由於JavaScript在客戶端運行,因此JS無法訪問該數據。這是錯誤的,POST數據既存在於客戶端,也存在於服務器中,JS之所以無法訪問這些數據,僅僅是因爲客戶端(瀏覽器)並未使其可用於JS。就如此容易。 – GetFree 2013-06-13 18:41:05

5

JavaScript是一種客戶端腳本語言,這意味着所有的代碼都在Web用戶的機器上執行。另一方面,POST變量則轉到服務器並駐留在那裏。瀏覽器不會將這些變量提供給JavaScript環境,也不應該有任何開發人員期望他們神奇地在那裏。

所以讀取POST變量幾乎是不可能的。 GET變量是一種僥倖,因爲它們在URL中,這是客戶端機器知道的事情。

但是,如果服務器響應將它們回顯到腳本中,則可以讀取POST變量的值。

+2

我強烈地不同意你的-1。在OP中沒有任何地方提到了AJAX的問題,因此留下了鏈接點擊和表單提交不可能通過JavaScript執行的可能性。後者特別是POST變量存在但在客戶端不可用的示例,除非服務器響應由腳本生成,並且腳本選擇將POST變量的值回顯到JS代碼中。如果我能-1你的評論,我會的。 – 2013-06-13 04:10:35

+1

我不是在談論AJAX。我的參數引用任何形式的POST請求。瀏覽器知道作爲HTTP請求的一部分發送的每個參數,其中包括URL和POST參數等。其中一些參數可用於JavaScript,而其他參數則不可用。這只是瀏覽器強加的一個限制,它可以很好地從JS訪問POST參數,但事實並非如此,這是簡單的事實。 – GetFree 2013-06-13 18:51:52

+0

你沒有明白我的觀點。除非服務器明確提供它們,否則沒有人會寫一個期望POST變量可用的JavaScript。如果服務器不提供它們,那麼就編寫JavaScript代碼的Web開發人員而言,他們可能完全不在客戶端。 – 2013-06-13 22:18:09

-1
$(function(){ 
    $('form').sumbit{ 
     $('this').serialize(); 
    } 
}); 

在jQuery中,上面的代碼會爲您提供帶有POST參數的URL字符串。 提取POST參數並不是不可能的。要使用jQuery,您需要包含jQuery庫。使用了下列:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js" type="text/javascript"></script> 
+4

這隻會從**中獲取表單提交頁面上的POST參數。這似乎是一個安全的假設,OP希望在表單提交的頁面上獲取POST參數**到**。這是不可能的。 – 2014-10-29 21:18:45

18

一小塊的PHP來獲得服務器,填入一個JavaScript變量是快速和容易:

var my_javascript_variable = <?php echo $_POST['my_post'] ?>; 

然後,只需訪問以正常方式JavaScript變量。

+8

小心逃脫/添加引號/等。到您的POST數據,如果你走這條路線。另一種方法是使用json_encode(),它幾乎適用於任何數據類型。例如:http://www.abeautifulsite.net/passing-data-from-php-to-javascript/ – claviska 2015-06-14 00:59:24

+0

現在這就是我所說的開箱即用的想法。 – 2017-01-15 12:18:28

+0

這是確實做到這一點的最簡單方法。這在wordpress中適用於我,創建一個新的主題頁面,並簡單地暴露窗口級別的發佈數據,如window.my_prefix_post_data = <?php echo $ _POST ['my_post']?>;然後輕鬆地從任何範圍訪問發佈數據。這不會被推薦用於一直有很多敏感的帖子數據的網站,但是對於我們網頁/網站的範圍來說,它的效果很好。 – 2018-02-08 23:58:08

1

POST是瀏覽器從客戶端(您的瀏覽器)發送到Web服務器的內容。發佈數據通過http頭髮送到服務器,並且它僅在服務器端或從客戶端(您的瀏覽器)到Web服務器的路徑(例如代理服務器)之間可用。所以它不能從JavaScript這樣的客戶端腳本中處理。您需要通過服務器端腳本(如CGI,PHP,Java等)來處理它。如果您仍然需要使用JavaScript編寫代碼,則需要有一個可在您的服務器中理解並執行JavaScript的Web服務器,如Node.js

-1

POST如果同一個瀏覽器首先發送了變量,則只有瀏覽器才能使用變量。如果另一個網站表單通過POST提交到另一個URL,瀏覽器將不會看到POST數據進來。

網站A:有一個表單使用POST提交到外部URL(網站B) 網站B:將收到訪問者但只有GET變量

1

您可以使用jQuery-PostCapture(@ssut/jQuery-PostCapture)讀取post請求參數。

PostCapture插件是由一些技巧組成的。

當你點擊提交按鈕時,onsubmit事件將被分派。

當時,PostCapture將序列化表單數據並保存到html5 localStorage(如果可用)或cookie存儲。

3

爲什麼不使用localStorage或任何其他方式來設置您想要通過的值? ?

這樣你就可以從任何地方訪問它!

+2

爲什麼不只是一個簡單的cookie? – 2018-01-10 10:17:09

+0

@jj_這也會起作用! – 2018-01-10 10:30:55

-3
<head><script>var xxx = ${params.xxx}</script></head> 

<head>使用EL表達式$ {} param.xxx從POST方法獲取參數,可以並確保<head>打完js文件包含你能處理像「XXX」直接在您的PARAM js文件。

-1

我們可以使用serialize概念收集使用POST提交的表單參數。

試試這個:

$('form').serialize(); 

只需附上它的提醒,它會顯示所有的參數,包括隱藏。

0

你可以'json_encode'首先通過PHP編碼你的發佈變量。 然後從JSON編碼的後期變量中創建一個JS對象(數組)。 然後使用JavaScript循環來操縱這些變量...喜歡 - 在下面這個例子 - 來填充HTML表單形式:

<script> 

    <?php $post_vars_json_encode = json_encode($this->input->post()); ?> 

    // SET POST VALUES OBJECT/ARRAY 
    var post_value_Arr = <?php echo $post_vars_json_encode; ?>;// creates a JS object with your post variables 
    console.log(post_value_Arr); 

    // POPULATE FIELDS BASED ON POST VALUES 
    for(var key in post_value_Arr){// Loop post variables array 

     if(document.getElementById(key)){// Field Exists 
      console.log("found post_value_Arr key form field = "+key); 
      document.getElementById(key).value = post_value_Arr[key]; 
     } 
    } 


</script> 
-1
function getParameterByName(name, url) { 
      if (!url) url = window.location.href; 
      name = name.replace(/[\[\]]/g, "\\$&"); 
      var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), 
       results = regex.exec(url); 
      if (!results) return null; 
      if (!results[2]) return ''; 
      return decodeURIComponent(results[2].replace(/\+/g, " ")); 
     } 
var formObj = document.getElementById("pageID"); 
formObj.response_order_id.value = getParameterByName("name"); 
+0

這是GET變量,OP特意詢問POST var並注意到他已經擁有GET變量。 – 2018-02-09 00:00:42

0

一個選項是設置在PHP中的cookie。

例如:

setcookie('invalid', $invalid, time() + 60 * 60 * 24); 

然後,在JS讀回出(使用JS Cookie插件)::

var invalid = Cookies.get('invalid'); 

if(invalid !== undefined) { 
    Cookies.remove('invalid'); 
} 
命名 無效$invalid值在1天后到期一個cookie

您現在可以在JavaScript中訪問invalid變量中的值。