Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';如果无法检索通过AJAX发送的formData以插入新的wordpress帖子,PHP会将值视为空白_Php_Jquery_Ajax_Wordpress - Fatal编程技术网

Can';如果无法检索通过AJAX发送的formData以插入新的wordpress帖子,PHP会将值视为空白

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

我通过jQuery.ajax()发送formData,但是处理所有这些的PHP函数无法正确检索和识别发送的数据。我已经经历了很多关于stackoverflow的问题,也尝试了很多不同的方法,但都没有用,最后还是放弃了

这一切都是在WORDPRESS中完成的

我不能使用serialize,因为我也在发送文件,但为了简单起见,我在下面省略了它们

这是表格的简化版本:

<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");
        }
    });       
}