admin-ajax возвращает статус 400, когда я пытаюсь загрузить файл Ajax в WordPress - PullRequest
0 голосов
/ 23 апреля 2019

Я новичок в мире WP. После прочтения множества сообщений я все еще не могу заставить простую загрузку Ajax-файла работать на WordPress.

Я пытаюсь сохранить в базе данных - имя, адрес электронной почты и резюме. Если я удалю поле входного файла, имя и адрес электронной почты будут правильно сохранены в базе данных.

В настоящее время моя форма выглядит следующим образом

<form method="post" id="applicantform" enctype="multipart/form-data">
     <input type="text" name="name" placeholder="Name" />
     <?php wp_nonce_field( 'my_nonce' ); ?>
     <input type="email" name="email" placeholder="Email" />
     <div class="upload">
         <input type="file" id="upload-resume" name="upload-resume" />
     </div>
     <input type="submit" name="submit_form" id="submit_form" value="Send" />
</form>

Часть JS

jQuery(document).ready(function($){ 

    $('#submit_form').click(function(e){ 

        var applyformData = document.getElementById("applicantform");
        e.preventDefault(); 

        //ajax call 
        $.ajax({ 
            type: 'POST', 
            url: myajax.ajaxurl, // ajax url you assigned! 
            contentType: false,
            cache: false,
            processData:false,   
            dataType: 'json',
            data: { 
                action: 'applyform',
                formdata: applyformData, 
            }, 

            // Displaying succes message 
            success: function( data ){ 

            }, 

            // Displaying error message 
            error: function( request ){ 
                console.log(request); 
            } 
        }); 
    }); 
});

А это функция в моем function.php

add_action('wp_enqueue_scripts', 'my_ajax_scripts'); 
function my_ajax_scripts(){
    wp_enqueue_script( 'myscript', get_template_directory_uri().'/assets/js/formSubmit.js', array('jquery'), '1.0', true );
    wp_localize_script( 'myscript', 'myajax', array( 'ajaxurl' =>   admin_url( '/admin-ajax.php' ) ) );
}

function applyform(){
    $valid_extensions = array('pdf' , 'doc' , 'ppt'); // valid extensions
    $path = wp_basename( $uploads['baseurl'] ); // upload directory

    if(!empty($_POST['name']) || !empty($_POST['email']) || $_FILES['upload-resume'])
    {
        $resume = $_FILES['upload-resume']['name'];
        $tmp = $_FILES['upload-resume']['tmp_name'];

        $ext = strtolower(pathinfo($resume, PATHINFO_EXTENSION));

        $final_resume = rand(1000,1000000).$resume;

        if(in_array($ext, $valid_extensions)) 
        { 
            $path = $path.strtolower($final_resume); 
            if(move_uploaded_file($tmp,$path)) 
            {
                $table = 'UPC_jobs'; 

                $data = array( 
                    'customer_name' => $formdata_array['name'], 
                    'customer_email' => $formdata_array['email'], 
                    'customer_resume' => $path 
                ); 

                $format = array( 
                    '%s', 
                    '%s', 
                    '%s'
                ); 
                $success=$wpdb->insert( $table, $data, $format ); 
            }
        } 
        else {
            echo 'invalid';
        }
    }    
}

Текущая ошибка Status Code: 400 для admin-ajax.php.

Может кто-нибудь помочь немного

1 Ответ

1 голос
/ 23 апреля 2019

Пожалуйста, проверьте ниже вещи в вашем коде

  1. Вам необходимо добавить две перехватчики в ваш файл function.php для обработки данных формы как для вошедшего в систему пользователя, так и для не вошедшего в систему пользователя.
add_action('wp_ajax_applyform', 'applyform');
add_action('wp_ajax_nopriv_applyform', 'applyform');

Для загрузки файла ajax проверьте ссылку Загрузка файла администратора ajax WP

Добавить Nonce

InВаша js часть

data: { 
    action: 'applyform',
    formdata: applyformData, 
    ajax_nonce : myajax.ajax_nonce 
}, 

В вашем файле function.php

add_action('wp_enqueue_scripts', 'my_ajax_scripts'); 

function my_ajax_scripts(){
......
wp_localize_script( 'myscript', 'myajax', array( 'ajaxurl' =>   admin_url( '/admin-ajax.php' ), 'ajax_nonce' => wp_create_nonce('security') );
}

function applyform(){
check_ajax_referer( 'security', 'ajax_nonce' );
.......
}

Дополнительная проверка документации WordPress: WP admin ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...