2008-11-07 47 views
4

我正在使用jQuery將表單發佈到一個php文件,用於驗證用戶詳細信息的簡單腳本。

var emailval = $("#email").val(); 
var invoiceIdval = $("#invoiceId").val(); 

$.post("includes/verify.php", 
     {invoiceId:invoiceIdval , email:emailval }, 
     function(data) { 
      //stuff here. 
}); 

PHP代碼:

<?php 
print_r($_POST); 
?> 

我看着螢火蟲的反應,這是一個空數組。數組至少應該有一些值。

我不知道爲什麼$_POST不在PHP文件中工作。 Firebug顯示帖子以包含發佈的內容,電子郵件和發票ID,但實際上在php文件中沒有收到任何內容。

形式:

<form method="post" action="<?=$_SERVER['PHP_SELF']; ?>" enctype="application/x-www-form-urlencoded"> 

任何人都知道它在做什麼?

感謝


發現這一點 - http://www.bradino.com/php/empty-post-array/

是一個明智的路線走?

回答

14

$.post()將數據傳遞給底層的$.ajax()調用,默認設置爲application/x-www-form-urlencoded,所以我不認爲是這樣。

你可以試試這個:

var post = $('#myForm').serialize();  

$.post("includes/verify.php", post, function(data) { 
    alert(data); 
}); 

serialize()通話將搶在form.myForm當前所有的數據。

+0

doh,那工作,謝謝,我可以得到的價值.. – Neil 2008-11-07 03:02:40

+0

沒問題,很高興你得到它的工作:) – Owen 2008-11-07 03:19:25

1
application/x-www-form-urlencoded 

有你的答案。它發佈了,你只需要在$ _POST數組中尋找變量。你真正想要的是$ _REQUEST。與名稱相反,$ _POST包含請求正文中提交的輸入變量,無論提交方法如何。 $ _GET包含從URL的查詢字符串解析的變量。如果您只想提交變量,請使用$ _REQUEST全局。

如果你希望將接收文件上傳,比你想創建一個新的陣列,包括$ _FILES,以及內容:

$參數= $ _REQUEST + $ _FILES;

+0

這並沒有爲我無所謂。 POST和REQUEST不起作用。我不是積極的問題,但序列化(上面)似乎工作,我只是切換到$ .get。 – Jake 2012-05-29 14:22:50

4

我被同樣的問題困住了,我發現Owen給出的解決方案並不合適。你自己序列化對象,而jQuery應該爲你做這件事。在這種情況下,你可以做一個$ .get()。

我發現在我的情況下,它實際上是一個服務器從/ mydir重定向到/ mydir /(使用斜槓),使POST數組無效。請求發送到/mydir內的index.php

這是在本地機器上,所以我無法檢查HTTP通信。如果我願意的話,我早就會發現。

0

我試着從歐文給出的函數,但也得到了一個空白的警報。奇怪,但我注意到它會輸出一個查詢字符串並返回一個空白的警報。然後我再次提交,它會提醒正確的帖子值。

也有使用id屬性在html中設置的字段名稱(這是我在跟蹤的jQuery教程中是如何完成的)。這不允許我的表單字段序列化。當我將id換成名字時,它解決了我的問題。

我最終以$ .ajax去,因爲它做了我想要的。

-1

我有一個案例,在使用jQuery提交表單之前,我正在使用jQuery禁用所有輸入(即使是我想要的隱藏的輸入)。我改變了我的jQuery只禁用「按鈕」類型的輸入,現在隱藏的變量在表單提交時發佈!看起來,如果你設置一個隱藏的輸入來禁用它的值不會與表單一起發佈!

更改:

$('input').attr('disabled',true); 

到:

$('input[type=button]').attr('disabled',true);