2017-07-25 48 views
0

我試圖從一個WordPress頁面提交表單以駐留在同一個目錄中的index.php在頁面上使用自定義HTML選項生成表格,使用jQuery serializeArray PHP腳本()將數據發送到php腳本。jQuery的serializeArray()WordPress的

在控制檯中,當我提交jQuery("#formID").serializeArray();它返回其存儲的名稱和各自的輸入端的值的對象。

然而,當我使用jQuery("resultDiv").load("phpScript.php", jQuery("#formID").serializeArray());的PHP $_POST變量爲空。

我已經在過去使用這種方法,它已經奏效。出於某種原因,在這種情況下它不起作用。任何人都有這個問題?這裏的腳本如下:

<script type="text/javascript"> 
//need to validate the form 
jQuery("#sendForm").click(function() { 
    var email = jQuery("#sub_email").val(); 
    var email2 = jQuery("#sub_verify_email").val(); 
    var type_reseller = jQuery("#sub_type").val(); 
    var province = jQuery("#sub_prov").val(); 
    var country_from = jQuery("#sub_country").val(); 
    var password = jQuery("#password").val(); 
    var pw_verify = jQuery("#pw_verify").val(); 

    if ((email!=email2) || (email=="")) 

    { 
    alert("Email addresses do not match. Please re-enter."); 
    jQuery("#sub_email").focus(); 
    jQuery("#sub_email").select(); 
    } 


    else 
    { 

    if (type_reseller=="") 
    { 
     alert("Please enter a Reseller Type"); 
    } 

    else 
    { 
     if (province=="--") 
     { 
     alert("Please select a Province or State"); 
     } 
     else 
     { 
     if (country_from == "") 
     { 
      alert("Please select which country you are from"); 
      jQuery("#sub_country").focus(); 
      jQuery("#sub_country").select(); 
     } 

     else 
     { 
      if ((password!=pw_verify) || (password=="")) 
      { 
      alert("Your Password entry does not match. Please re-enter"); 
      jQuery("#password").focus(); 
      jQuery("#password").select(); 
      } 

      else 
      { 
      jQuery("#submitResult").html("<h2>Sending Form...</h2>"); 
      //submit the form to the database 
      jQuery("#submitResult").load("../subscribeSubmit.php", jQuery("#Subscribe").serializeArray()); 
      } 
     } 
     } 
    } 
    } 
}); 
//--> 

//need to submit the form using ajax 


</script> 
JSON.stringify(jQuery("#Subscribe").serializeArray())

控制檯的項,輸出結果......

"[{"name":"sub_conf","value":"Yes"},{"name":"sub_conf2","value":"Yes"},{"name":"sub_type","value":"Service Provider"},{"name":"sub_firstname","value":"hello"},{"name":"sub_lastname","value":"world"},{"name":"sub_company","value":"anycompany"},{"name":"sub_city","value":"anycity"},{"name":"sub_prov","value":"ON"},{"name":"sub_country","value":"Canada"},{"name":"sub_country","value":""},{"name":"sub_email","value":"[email protected]"},{"name":"sub_verify_email","value":"[email protected]"},{"name":"password","value":"hello"},{"name":"pw_verify","value":"hello"},{"name":"nl_version","value":"H"},{"name":"sub_comments","value":"this is a comment"},{"name":"form_submitted","value":"TRUE"}]" 

當我用print_r($_POST)上的目標腳本,看看有什麼腳本正在接受它返回Array() (empty array)

網絡的響應看起來是這樣的:

General: 
Request URL:http://example.com/subscribeSubmit.php 
Request Method:POST 
Status Code:200 OK 
Remote Address:222.222.222.222:80 
Referrer Policy:no-referrer-when-downgrade 

Response Header: 
Connection:keep-alive 
Content-Type:text/html; charset=UTF-8 
Date:Tue, 25 Jul 2017 18:04:51 GMT 
Server:nginx 
Transfer-Encoding:chunked 
X-Powered-By:PHP/7.1.7 
X-Powered-By:PleskLin 

Request Headers 
Accept:text/html, */*; q=0.01 
Accept-Encoding:gzip, deflate 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Content-Length:0 
Cookie:pum-7361=true 
Host:example.com 
Origin:http://example.com 
Referer:http://example.com/subscribe/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 
X-Requested-With:XMLHttpRequest 

任何有識之士將是有益的。

+0

有兩件事:首先,您應該更新問題,使用jQuery(「#Subscribe」)生成的更好的格式化數據。serializeArray()';您提供的控制檯輸出不清楚數據結構究竟是什麼(嘗試序列化爲JSON)。其次,檢查控制檯網絡選項卡,以查看請求中發送的數據。 – wmorrell

+0

@wmorrell我爲你設置了'console.log'輸出格式(比我預期的更耗時)。 –

回答

0

答案很簡單:使用jQuery.serialize()代替jQuery.serializeArray()


我認爲這個問題是序列化的數據是不是在該load函數需要的形式。因此該請求不發送任何數據(請注意請求標題中的行Content-Length:0)。 documentation for load並沒有多說有關數據的格式,直到最後。相關章節的內容如下:

$("#objectID").load("test.php", { "choices[]": [ "Jon", "Susan" ] }); 

該文檔的更好的一部分是jQuery.ajax的頁面。將數據發送到服務器的下那裏部分讀取:

數據選項可以包含形式key1=value1&key2=value2的查詢字符串,或者形式{key1: 'value1', key2: 'value2'}的對象。如果使用後一種形式中,該數據被轉換成用jQuery.param()在發送前一個查詢字符串。

請注意,您的數據的格式爲[{name: 'key1', value: 'value1'}],而不是形式{key1: 'value1'}。您可以將值數組重新映射到適當形式的對象中,但使用serialize()的直接方法獲得key1=value1字符串似乎更簡單。

0

我想出了問題......當我用'Submitting Form'取代表格時,表格的ID被清除了,所以沒有表格數據發送......我刪除了那一行,一切正常。