var_dump($_POST) 返回 array(0){} for stringified JSON passed with jQuery AJAX
var_dump($_POST) returning array(0){} for stringified JSON passed with jQuery AJAX
嗨,我似乎无法让这个 post 工作。首先,我使用 Typescript 创建了一个 class:
class ParticipantInfo {
constructor (public fname: string,
public mname: string,
public lname: string,
public ssn: string,
public sin: string,
public tin: string,
public addr1: string,
public addr2: string,
public addr3: string,
public city: string,
public state: string,
public zip: string,
public email: string,
public phone: string,
public local: string){}
}
创建此 javascript:
var ParticipantInfo = (function () {
function ParticipantInfo(fname, mname, lname, ssn, sin, tin, addr1, addr2, addr3, city, state, zip, email, phone, local) {
this.fname = fname;
this.mname = mname;
this.lname = lname;
this.ssn = ssn;
this.sin = sin;
this.tin = tin;
this.addr1 = addr1;
this.addr2 = addr2;
this.addr3 = addr3;
this.city = city;
this.state = state;
this.zip = zip;
this.email = email;
this.phone = phone;
this.local = local;
}
return ParticipantInfo;
}());
我使用 jQuery 处理附加到表单元素的 HTML 按钮上的提交事件:
$(document).ready(function(){
$("#frmInquiryForm").submit(function(event){
event.preventDefault();
var formData = new ParticipantInfo($('[name="f1_fname"]').val(),
$('[name="f1_mname"]').val(),
$('[name="f1_lname"]').val(),
$('[name="f1_ssn"]').val(),
$('[name="f1_sin"]').val(),
$('[name="f1_tin"]').val(),
$('[name="f1_addr1"]').val(),
$('[name="f1_addr2"]').val(),
$('[name="f1_addr3"]').val(),
$('[name="f1_city"]').val(),
$('[name="f1_state"]').val(),
$('[name="f1_zip"]').val(),
$('[name="f1_email"]').val(),
$('[name="f1_phone"]').val(),
$('[name="f1_local"]').val());
$.ajax({
type: "POST",
url:"processForm.php",
data: JSON.stringify(formData),
success: function(data){
alert(data);
window.location = 'confirmForm.php?message='+data;
},
error: function(xhr, ajaxOptions, thrownError){
alert('status='+ajaxOptions);
alert("XHR STATUS="+xhr.status+" "+ thrownError);
}
});
})
})
只是为了测试,我在 processForm.php 页面上所做的是这样的:
<?php
var_dump($_POST);
?>
来自成功 AJAX 调用的警报消息仅 returns "array(0){}"。 JSON.stringify 是问题还是有其他人知道?预先感谢您的所有帮助!
发送数据前删除 JSON.stringify
。
您没有在 $.ajax
调用中指定 contentType
,文档说默认值为 application/x-www-form-urlencoded
。 jquery 将您的数据编码为 foo=bar&this=that
如果您将对象传递给它,但在这里您传递的是编码的 json 字符串,从而导致意外行为,对我来说,可能是 php 接收类似 "{"foo":"bar"}"
的内容,而 php 仅自动解析 urlencoded
请求正文(因为 json 格式的正文在标准中是相对较新的)。
所以如果你想使用 application/json
content-type
,请确保你在 $.ajax
的选项中指定它,并在 php 中解析它,如 $requestArray = json_decode(file_get_contents('php://input'));
。在另一个问题中阅读更多内容 here.
嗨,我似乎无法让这个 post 工作。首先,我使用 Typescript 创建了一个 class:
class ParticipantInfo {
constructor (public fname: string,
public mname: string,
public lname: string,
public ssn: string,
public sin: string,
public tin: string,
public addr1: string,
public addr2: string,
public addr3: string,
public city: string,
public state: string,
public zip: string,
public email: string,
public phone: string,
public local: string){}
}
创建此 javascript:
var ParticipantInfo = (function () {
function ParticipantInfo(fname, mname, lname, ssn, sin, tin, addr1, addr2, addr3, city, state, zip, email, phone, local) {
this.fname = fname;
this.mname = mname;
this.lname = lname;
this.ssn = ssn;
this.sin = sin;
this.tin = tin;
this.addr1 = addr1;
this.addr2 = addr2;
this.addr3 = addr3;
this.city = city;
this.state = state;
this.zip = zip;
this.email = email;
this.phone = phone;
this.local = local;
}
return ParticipantInfo;
}());
我使用 jQuery 处理附加到表单元素的 HTML 按钮上的提交事件:
$(document).ready(function(){
$("#frmInquiryForm").submit(function(event){
event.preventDefault();
var formData = new ParticipantInfo($('[name="f1_fname"]').val(),
$('[name="f1_mname"]').val(),
$('[name="f1_lname"]').val(),
$('[name="f1_ssn"]').val(),
$('[name="f1_sin"]').val(),
$('[name="f1_tin"]').val(),
$('[name="f1_addr1"]').val(),
$('[name="f1_addr2"]').val(),
$('[name="f1_addr3"]').val(),
$('[name="f1_city"]').val(),
$('[name="f1_state"]').val(),
$('[name="f1_zip"]').val(),
$('[name="f1_email"]').val(),
$('[name="f1_phone"]').val(),
$('[name="f1_local"]').val());
$.ajax({
type: "POST",
url:"processForm.php",
data: JSON.stringify(formData),
success: function(data){
alert(data);
window.location = 'confirmForm.php?message='+data;
},
error: function(xhr, ajaxOptions, thrownError){
alert('status='+ajaxOptions);
alert("XHR STATUS="+xhr.status+" "+ thrownError);
}
});
})
})
只是为了测试,我在 processForm.php 页面上所做的是这样的:
<?php
var_dump($_POST);
?>
来自成功 AJAX 调用的警报消息仅 returns "array(0){}"。 JSON.stringify 是问题还是有其他人知道?预先感谢您的所有帮助!
发送数据前删除 JSON.stringify
。
您没有在 $.ajax
调用中指定 contentType
,文档说默认值为 application/x-www-form-urlencoded
。 jquery 将您的数据编码为 foo=bar&this=that
如果您将对象传递给它,但在这里您传递的是编码的 json 字符串,从而导致意外行为,对我来说,可能是 php 接收类似 "{"foo":"bar"}"
的内容,而 php 仅自动解析 urlencoded
请求正文(因为 json 格式的正文在标准中是相对较新的)。
所以如果你想使用 application/json
content-type
,请确保你在 $.ajax
的选项中指定它,并在 php 中解析它,如 $requestArray = json_decode(file_get_contents('php://input'));
。在另一个问题中阅读更多内容 here.