2014-04-22 74 views
0

我有兩個字段,一個是文本字段,另一個是選擇字段。在提交我張貼表單。有人可以告訴我如何使用javasctipt檢索服務器中的表單數據。如何檢索javascript中的發佈請求中的數據

<form id="createGameForm" action="/createGame" method="post" data-async> 
    <div><label for="serverName">Server Name:</label><input type="text" id="serverName"         required> 
    </div> 
    <div> 
     <label for="noOfPlayers">Number Of Players:</label> 
     <select id="noOfPlayers" required> 
      <option>2</option> 
      <option>3</option> 
      <option>4</option> 
     </select> 
    </div> 
    <input type="submit" value="Create Server" aria-hidden="true" form="createGameForm" class="btn> 
</form> 

它是一個快速的應用程序。

app.post('/createGame', function (req, res) { 
    //how to get data from req object. 
    res.render('server.jade'); 
}); 
+0

你的意思是你想獲得url中的變量嗎? example.com/?id=123 – ndugger

+0

否。如果它是一個GET方法,它將發送URL中的變量。但我希望它成爲POST方法。在POST方法中,值不會出現在URL中。那麼,我如何獲得這些值? –

+0

我想我不理解「檢索服務器中的表單數據」部分。也許你的問題不夠具體。您是否希望通過第二個Ajax請求獲取數據,或者閱讀表單發佈期間發送的任何內容? –

回答

0

有多種方式來處理這取決於你在找什麼。

方法1:

您可以使用JavaScript來取消表單提交,從形式讀取輸入值,然後提交通過Ajax POST請求的形式。

$('form').submit(function(evt) { 
    evt.preventDefault() // This cancels the form request. 

    $.ajax({ 
     type: 'POST', 
     url: evt.target.action, 
     data: $(evt.target).serialize(), 
     success: function(data) { 
      // read data here 
     } 
    }); 
}) 

方法2:

您可以將您的形式指向一個無形的iframe,然後從iframe中讀取它。

<form id="createGameForm" action="/createGame" method="post" data-async target="my_iframe"> 
    ... snip ... 
</form> 

<iframe name="my_iframe" src="about:blank" style="visibility: hidden;"></iframe> 

然後閱讀

$('iframe').load(function(evt) { 
    var iframe = evt.target 
     , doc = iframe.contentWindow.document || iframe.contentDocument || window.frames[iframe.id].document 
     , responseText = doc.body.textContent 
}) 

這裏有一個問題,有更多的細節:How do you post to an iframe?

方法2的警惕的是,瀏覽器打開你之前做的東西與它處理內容。您需要在對text/plain的響應中設置內容類型標題,以防止瀏覽器對其進行混淆。

聲明:以上代碼未經測試。

-1

有多種方式來處理這取決於你在找什麼。

方法1:

您可以使用JavaScript來取消表單提交,從形式讀取輸入值,然後提交通過Ajax POST請求的形式。

$('form').submit(function(evt) { 
    evt.preventDefault() // This cancels the form request. 

$.ajax({ 
    type: 'POST', 
    url: evt.target.action, 
    data: $(evt.target).serialize(), 
    success: function(data) { 
     // read data here 
     } 
    }); 
}) 

方法2:

您可以指向您的表格,一種無形的iframe,然後從iframe中讀取它。

... snip ...

然後閱讀

$('iframe').load(function(evt) { 
    var iframe = evt.target 
     , doc = iframe.contentWindow.document || iframe.contentDocument || window.frames[iframe.id].document 
     , responseText = doc.body.textContent 
}) 

這裏有一個問題,有更多的細節:你是如何發佈的iframe?

方法2的一個注意事項是,瀏覽器在處理內容之前是打開的,以便處理它。您需要在對text/plain的響應中設置內容類型標題,以防止瀏覽器對其進行混淆。

聲明:以上代碼未經測試。

上面的答案可以工作!

+0

請不要添加「謝謝」或「此答案有效」作爲答案。在網站上投入一些時間,您將獲得足夠的[特權](http://stackoverflow.com/privileges/vote-up)來滿足您喜歡的答案,這就是Stack Overflow的方式來表達謝意。 –

相關問題