Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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
Php 使用ajax停止post提交_Php_Jquery_Ajax_Wordpress - Fatal编程技术网

Php 使用ajax停止post提交

Php 使用ajax停止post提交,php,jquery,ajax,wordpress,Php,Jquery,Ajax,Wordpress,我想对我制作的一些自定义帖子类型进行预验证,我决定使用ajax进行预验证,因此我编写了以下代码: 为脚本添加内容: function hazeracareer_admin_scripts(){ global $post_type; if ( $post_type == 'job' ) { $theme_uri = get_stylesheet_directory_uri(); wp_register_script('pre-job-sub

我想对我制作的一些自定义帖子类型进行预验证,我决定使用ajax进行预验证,因此我编写了以下代码: 为脚本添加内容:

function hazeracareer_admin_scripts(){
    global $post_type;    

    if ( $post_type == 'job' ) {
        $theme_uri = get_stylesheet_directory_uri();
        wp_register_script('pre-job-submit-validation', $theme_uri . '/admin/js/pre-job-submit-validation.js', array('jquery'), '2133672');
        wp_localize_script('pre-job-submit-validation', 'secure', array('nonce' => wp_create_nonce('hazeracareer_pre_job_submit_validation')));
        wp_enqueue_script('pre-job-submit-validation');
    }

}
add_action('admin_enqueue_scripts', 'hazeracareer_admin_scripts');
JS文件:

jQuery(document).ready(function ($) {
    $('#post').submit(function () {

        var form_data = $('#post').serialize();
        var nonce = secure.nonce;
        var data = {
            action: 'hazeracareer_pre_job_submit_validation',
            security: nonce,
            form_data: form_data
        };
        $.post(ajaxurl, data, function (response) {
            if ( response == 0 ) {
                alert('The Job Number You entered is already exists in another job!');
                return false;
            } else {
                return true;
            }
        });
    });
});
处理ajax请求并进行验证:

function hazeracareer_pre_job_submit_validation(){

    check_ajax_referer('hazeracareer_pre_job_submit_validation', 'security');

    $post = array();
    parse_str($_POST['form_data'], $post);

    if ( !isset($post['fields']['field_job_number']) )
        return;

    $jobs = get_posts(array(
        'post_type' => 'job',
        'post_status' => array('publish', 'draft'),
        'posts_per_page' => -1,
        'meta_key' => 'job_number',
        'meta_value' =>$post['fields']['field_job_number']
    ));

    if ( empty($jobs) ) {
        echo 1;
    }

    echo 0;



    wp_die();

}
add_action('wp_ajax_hazeracareer_pre_job_submit_validation', 'hazeracareer_pre_job_submit_validation');
但是,即使我收到错误警报,您输入的作业编号已存在于另一个作业中!,在我按下OK键后,表单确实提交了,我收到了管理员通知,确认帖子已经更新。 在发出警报后,我返回false,因此不应提交表单。 我在网上搜索,似乎什么都没用。我错过了什么


提前感谢

您的问题在于您在嵌套函数中返回false。看看你的代码

jQuery(document).ready(function ($) {
    $('#post').submit(function () {

        //...
        //you need to return from within this function

        $.post(ajaxurl, data, function (response) {

            //...
            //you are instead returning from this function, which will not stop the form submission

        });
    });
});
我解决这个问题的方法是使用某种类型的持久变量,以便知道您的验证是否通过。例如,

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

    //protect scope
    $(function() {

        //track the validation
        var valid = false;

        //form submit
        $('#post').on('submit', function(evt) {

            if( valid === true )
                return true;    //now the form will submit!

            //not valid yet! Perform validation
            $.post(ajaxurl, data, function(response) {

                //was the response valid?
                if( response_is_valid ) {

                    valid = true;
                    $('#post').trigger('submit');   //trigger the submit event, which will submit the form since valid is not true

                }else {
                    //display some error to the user
                }

            });


            //always returning false otherwise, so the form never submits
            return false;
        });

    });

});
改变

或者另一个选项是不要使用提交按钮。使用带有单击事件的按钮。检查是否一切正常,如果是,则执行以下操作:

....
    if (fine = true){
      $("#post").submit();
    }
...

你放在文档中的“$函数”的用途是什么。准备好了吗?感谢您的帮助这是一个自我呼叫功能。我使用它来保护变量范围。由于var valid是在此函数内创建的,因此该变量不会污染此函数之外的范围。
$('#post').submit(function (e) {
  e.preventDefault();
  ....
....
    if (fine = true){
      $("#post").submit();
    }
...