Can';如果无法检索通过AJAX发送的formData以插入新的wordpress帖子,PHP会将值视为空白
我通过jQuery.ajax()发送formData,但是处理所有这些的PHP函数无法正确检索和识别发送的数据。我已经经历了很多关于stackoverflow的问题,也尝试了很多不同的方法,但都没有用,最后还是放弃了 这一切都是在WORDPRESS中完成的 我不能使用serialize,因为我也在发送文件,但为了简单起见,我在下面省略了它们 这是表格的简化版本:Can';如果无法检索通过AJAX发送的formData以插入新的wordpress帖子,PHP会将值视为空白,php,jquery,ajax,wordpress,Php,Jquery,Ajax,Wordpress,我通过jQuery.ajax()发送formData,但是处理所有这些的PHP函数无法正确检索和识别发送的数据。我已经经历了很多关于stackoverflow的问题,也尝试了很多不同的方法,但都没有用,最后还是放弃了 这一切都是在WORDPRESS中完成的 我不能使用serialize,因为我也在发送文件,但为了简单起见,我在下面省略了它们 这是表格的简化版本: <form id="newForm" method="post" enctype='multipart/form-data'&g
<form id="newForm" method="post" enctype='multipart/form-data'>
<div>
<label>Title</label>
<input name="title" type="text" value=""/>
</div>
<div>
<label>Content</label>
<input name="content" type="text" value=""/>
</div>
<button type="submit" id="submit_button">SUBMIT</button>
</form>
这是处理post insert的PHP(它被正确调用,我通过在post标题和内容中插入静态值进行了检查),为了简单起见,我省略了nonce和其他内容:
function upload_function(){
$json_result=array();
$json_input=$_POST['new_data'];
$post_vars=json_decode($json_input,true);
$submit_post_data = array (
'post_title' => $post_vars['title'],
'post_content' => $post_vars['content'],
'post_status' => 'draft'
);
$post_id = wp_insert_post($submit_post_data);
if($post_id){
$json_result['success']=1;
}else{
$json_result['success']=0;
}
wp_send_json($json_result);
exit();
}
add_action('wp_ajax_upload_function','upload_function');
您需要序列化表单数据,然后将其传递给php代码。对您的
var新数据执行此操作
var new_data = $(this).serialize()
编辑1:正如您所说,您有文件需要使用FormData对象在ajax中将文件传递给服务器。请参阅下面的代码
var $element = $(this);
var formdata = new FormData();
var totalFiles = $element.files.length;
if (totalFiles > 0) {
for (var i = 0; i < totalFiles; i++) {
var file = $element.files[i];
formdata.append("FileUpload", file);
}
$.ajax({
type: "POST",
url: Url,
data: formdata,
contentType: false,
processData: false,
success: function (result) {
// make the server return a array of file names that has been saved.
//Post your other form elements data a this point with the filename array.
},
error: function (error) {
console.log("File Upload Failure");
}
});
}
var$element=$(这个);
var formdata=new formdata();
var totalFiles=$element.files.length;
如果(totalFiles>0){
对于(var i=0;i
新表单数据($(本)[0])
here$(this)[0]将返回表单元素。你不能通过考试。。必须将表单数据准确地传递到表单中,将带有[0]的表单元素作为参数传递给FormData,这就是它的工作方式和其他人的工作方式。我相信这不起作用的原因是其他原因…我已经在问题中写道,我不能使用serialize,因为我在表单中有文件,它们不会被传递。顺便说一句,在我仍然无法检索传递的值之前尝试序列化时,它们都是空白的。很抱歉,我漏掉了这一部分,您必须在ajax中发布文件。这不是直截了当的。为什么我不同时上传文件和其他元素呢?我如何发布其他关于成功的表单数据?用另一个ajax调用调用jQuery函数?我从未尝试过同时上传这两个函数。你可以试一试。是的,我指的是另一个ajax调用,如果您只有很少的输入项,那么您可以提取每个值并将整个内容作为对象发送。
var $element = $(this);
var formdata = new FormData();
var totalFiles = $element.files.length;
if (totalFiles > 0) {
for (var i = 0; i < totalFiles; i++) {
var file = $element.files[i];
formdata.append("FileUpload", file);
}
$.ajax({
type: "POST",
url: Url,
data: formdata,
contentType: false,
processData: false,
success: function (result) {
// make the server return a array of file names that has been saved.
//Post your other form elements data a this point with the filename array.
},
error: function (error) {
console.log("File Upload Failure");
}
});
}