首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery serializeArray() wordpress

jquery serializeArray() wordpress
EN

Stack Overflow用户
提问于 2017-07-26 01:51:41
回答 2查看 259关注 0票数 0

我正在尝试从Wordpress页面提交表单到与index.php位于同一目录中的php脚本,使用页面上的自定义html选项生成表单,并使用jQuery serializeArray()将数据发送到php脚本。

在console中,当我提交jQuery("#formID").serializeArray();时,它会返回一个存储每个输入的名称和值的对象。

但是,当我使用jQuery("resultDiv").load("phpScript.php", jQuery("#formID").serializeArray());时,PHP $_POST变量是空的。

我在过去使用过这种方法,它很有效。由于某些原因,它在这种情况下不起作用。其他人也有这个问题吗?下面是脚本的样子:

代码语言:javascript
复制
<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())会产生以下输出...

代码语言:javascript
复制
   "[{"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":"anyone@anyplace.com"},{"name":"sub_verify_email","value":"anyone@anyplace.com"},{"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)

网络响应如下所示:

代码语言:javascript
复制
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

任何洞察力都会有所帮助。

EN

回答 2

Stack Overflow用户

发布于 2017-07-26 07:29:06

简短的答案是:使用jQuery.serialize()而不是jQuery.serializeArray()

我认为问题在于序列化的数据不是load函数所期望的形式。因此,请求不会发送任何数据(请注意请求标头中的Content-Length:0行)。在结束之前,documentation for load并没有过多地说明传入的数据格式。相关部分为:

代码语言:javascript
复制
$( "#objectID" ).load( "test.php", { "choices[]": [ "Jon", "Susan" ] } );

文档中更好的部分是jQuery.ajax页面。将数据发送到服务器下的部分为:

data选项可以包含key1=value1&key2=value2格式的查询字符串,也可以包含{key1: 'value1', key2: 'value2'}格式的对象。如果使用后一种形式,则在发送之前使用jQuery.param()将数据转换为查询字符串。

请注意,您的数据是[{name: 'key1', value: 'value1'}]表单而不是{key1: 'value1'}表单。您可以将值数组重新映射为适当形式的对象,但是使用serialize()的直接方法来获取key1=value1字符串似乎要简单得多。

票数 0
EN

Stack Overflow用户

发布于 2017-08-05 03:22:08

我发现了问题所在。当我将表单ID替换为“提交表单”时,表单ID已被清除,因此,没有表单数据可发送...我删除了这行代码,一切都很正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45310403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档