Ответ Ajax не отображается на странице

#javascript #php #ajax

#javascript #php #ajax

Вопрос:

Мой ajax

     $.ajax({
        type: 'POST',
        url: ajax.ajax,
        contentType: false,
        processData: false,
        dataType: 'JSON',
        status: 200,
        data: formdata,
        success: function(msg){
            $('#success_message').fadeIn().html(data);
            setTimeout(function() {
                $('#success_message').fadeOut("slow");
        }, 2000 );

        }
    });
  

Это часть PHP

 function form(){ 

    global $wpdb;
    $table = cars;

    foreach ($_FILES as $file) {
        if($file['error'] == UPLOAD_ERR_NO_FILE) {
            continue;
        }

        $valid_ext = array( 'img' , 'png');
        $extension_upload = strtolower(  substr(  strrchr($file['name'], '.')  ,1)  );
        if ( in_array($extension_upload,$valid_ext) ) {
            $name_upload = uniqid() . $file['name'];
            $url_insert = trailingslashit( plugin_dir_path( dirname( __FILE__ ) ) ) . 'uploads';
            wp_mkdir_p($url_insert);
            $name_insert = trailingslashit($url_insert) . $name_upload;
            $action = move_uploaded_file($file['tmp_name'],$name_insert);

            $data = array( 'customer_resume' => $name_upload );
            $format = array( '%s' );

            $success=$wpdb->insert( $table, $data, $format );  
            $msg_true = 'Upload ok ';

        } else {
            $msg_error = 'Upload error';
        }
    }

    $result = !isset($msg_error);
    $msg = array();

    if($result) {
        $msg['error'] = 'true';
        $msg['true'] = $msg_true;
    } else {
        $msg['error'] = 'false';
        $msg['false'] = $msg_error;
    }

    header('Content-Type: application/json');
    echo json_encode($msg);

}
  

И HTML, где я пытаюсь показать сообщение об успехе или ошибке

 <div id="error_message"></div>
<div id="success_message"></div>
  

Когда я нажимаю на кнопку отправки, у меня все работает нормально и сохраняется в базе данных, но нет никаких указаний на то, что это успех или нет. Я пытался добавить это msg , но на странице все еще ничего не отображается.

Комментарии:

1. что data здесь $('#success_message').fadeIn().html(data); ? и как вы меняете сообщение как html?

2. @NikleshRaut я не уверен. Я пробовал разные вещи, чтобы показать это..

3. Я не очень знаком с js и просто пробовал разные «решения» из разных руководств

Ответ №1:

На стороне PHP:

Вам нужно напечатать одну и ту же переменную для успеха и неудачи:

 if($result) {
        $msg['error'] = 'true';
        $msg['msg'] = $msg_true;
    } else {
        $msg['error'] = 'false';
        $msg['msg'] = $msg_error;
    }
  

Сторона JavaScript:

Ответ AJAX будет отображаться как

 data.error -> true or false.
data.msg -> Success or Error message depending upon program logic.

...
 success: function(data){
  $('#success_message').fadeIn().html(data.msg);
...
  

Комментарии:

1. Не могли бы вы посмотреть, что есть в консоли javascript?

2. Ну, я ничего не вижу.

3. Я попытался добавить console.log(data.msg); внутреннюю функцию успеха, но также ничего не показывает на консоли

4. Это потому, что вы пытаетесь отобразить неправильную вещь, попробуйте console.log(msg.msg). Данные, передаваемые в функцию, называются msg, элемент JSON этого элемента также называется msg. Аспект данных — это данные формы, отправляемые в PHP-скрипт.

5. @Jared, вы передаете переменную msg в function: success() , поэтому вам нужно использовать msg.msg вместо data.msg as data нигде.

Ответ №2:

Что скрывается за «ajax.ajax»?

Также, если вы хотите показать свои данные, вам нужно использовать «msg»

 success: function(msg){
        $('#success_message').fadeIn().html(msg);
        setTimeout(function() {
            $('#success_message').fadeOut("slow");
    }, 2000 );

    }
  

Комментарии:

1. За ajax.ajax находится локализация WordPress — wp_enqueue_script и wp_localize_script