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

时间:2016-02-25 22:21:27

标签: php jquery ajax wordpress

我通过jQuery.ajax()发送formData,但正在处理所有这些的PHP函数无法正确检索和识别正在发送的DATA。我已经在stackoverflow上经历了很多问题,并且还以许多不同的方式尝试了这一切都无济于事并最终放弃了。

这一切都在WORDPRESS完成。

无法使用序列化,因为我也在发送文件,但为了简单起见,我将它们遗漏在下面。

这是表格的简化版本:

<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>

这是jQuery:

jQuery(document).ready(function(){
$('#newForm').submit(function(e){
        e.preventDefault();
        var new_data = new FormData($(this)[0]);                      
    $.ajax({
        url:ajaxurl,
        type: "POST",
        data: {
            'action': 'upload_function',
            new_data //I've tried new_data: new_data
        },
        cache:false,
        processData:false,
        dataType: 'json', //tried not sending it as json dataType, still didn't work
        success:function(response){
            console.log(response);
            if(response.success == 1){
            alert("Post inserted");
            }else{
            alert("Post not inserted");
            }
        },
        error:function(){
            alert("Ajax request hasn't passed");
        }
    });
   });
});

这是处理帖子插入的PHP(它被正确调用,我通过在帖子标题和内容中插入静态值来检查),为了这个缘故我遗漏了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');

1 个答案:

答案 0 :(得分:1)

您需要序列化表单数据,然后将其传递给php代码。对您的var new_data作业执行此操作。

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