我正在尝试从Wordpress页面提交表单到与index.php位于同一目录中的php脚本,使用页面上的自定义html选项生成表单,并使用jQuery serializeArray()将数据发送到php脚本。
在console中,当我提交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":"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)。
网络响应如下所示:
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任何洞察力都会有所帮助。
发布于 2017-07-26 07:29:06
简短的答案是:使用jQuery.serialize()而不是jQuery.serializeArray()。
我认为问题在于序列化的数据不是load函数所期望的形式。因此,请求不会发送任何数据(请注意请求标头中的Content-Length:0行)。在结束之前,documentation for load并没有过多地说明传入的数据格式。相关部分为:
$( "#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字符串似乎要简单得多。
发布于 2017-08-05 03:22:08
我发现了问题所在。当我将表单ID替换为“提交表单”时,表单ID已被清除,因此,没有表单数据可发送...我删除了这行代码,一切都很正常。
https://stackoverflow.com/questions/45310403
复制相似问题