簡體   English   中英

數組在jQuery中沒有按預期運行

[英]Array not acting as expected in jQuery

我正在使用PHP進行jQuery Ajax,並且在jQuery將一些$ _POST數據傳遞給PHP之后,PHP驗證這些數據,並准備一個包含所有錯誤的數組,並且一旦完成所有驗證,就會發現錯誤計數,如果它大於0,數組以json編碼,並在屏幕上打印。 然后,jQuery使用'success:'抓取這些數據並且它會這樣做,但它沒有按預期運行。

PHP文件驗證:

<?php
$messages = array();

if(isset($_POST['name']) && isset($_POST['email']) && isset($_POST['subject']) && isset($_POST['message'])) {
    if(empty($_POST['name'])) {
        $messages[] = "Please fill in the Name field.";
    }
    if(empty($_POST['email'])) {
        $messages[] = "Please fill in the Email field.";
    }
    if(empty($_POST['subject'])) {
        $messages[] = "Please fill in the Subject field.";
    }
    if(empty($POST['message'])) {
        $messages[] = "Please write your message in the Message field!";
    }

    if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $messages[] = "Invalid email entered!";
    }

    if(strlen($_POST['name']) > 30 || strlen($_POST['name']) < 3) {
        $messages[] = "Your name cannot be less than 3 characters or more than 30 characters.";
    }
    if(strlen($_POST['email']) > 30 || strlen($_POST['email']) < 3) {
        $messages[] = "Your email cannot be less than 3 characters or more than 30 characters.";
    }
    if(strlen($_POST['subject']) > 30 || strlen($_POST['subject']) < 3) {
        $messages[] = "The subject cannot be less than 3 characters or more than 30 characters.";
    }
    if(strlen($_POST['message']) > 2000 || strlen($_POST['message']) < 40) {
        $messages[] = "Your message cannot be less than 40 characters or more than 2000 characters.";
    }

    if(count($messages) > 0) {
        $messages['elements'] = count($messages);
        echo json_encode($messages);
    } else {

    }
}

jQuery代碼:

$(document).ready( function() {
    $(document).on('click', '.contact_submit', function() {
        var name = $('input#name').val();
        var email = $('input#email').val();
        var subject = $('input#subject').val();
        var message = $('input#message').val();

        var Data = "name=" + name + "&email=" + email + "&subject=" + subject + "&message=" + message;

        $.ajax({
            type: "POST",
            url: "portal/_inc/frontend/form.php",
            data: Data,
            success: function(messages) {

                var Count = messages.length;
                $('.messages').empty();
                for(var i = 0; i < Count; i++) {
                    $('.messages').append('<li class"error">' + messages[i] + '</li>\n');
                }
            }
        });
        return false;
    });
});

一切正常,但我的輸出是'char'格式,一次只有一個字符。 點擊此處查看截屏。

這是因為你的響應是一個字符串,而你正在迭代一個字符串。

這個PHP代碼:

echo json_encode($messages);

將對象/數組編碼為JSON字符串。

這個JS代碼:

var Count = messages.length;

將只返回整個字符串的長度,而不是返回的JSON中單個對象的數量。


解決它的最簡單方法是在成功回調中解析JSON:

var messageObject = JSON.parse(messages);

現在變量messageObject將具有您期望的格式的數據。

dataType:'JSON'添加到您的ajax請求:

 $.ajax({
        dataType:'JSON',
        type: "POST",
        url: "portal/_inc/frontend/form.php",
        data: Data,
        .....

並添加

 header('Content-type: application/json; charset=utf-8');

到你的PHP,以便javascript知道如何處理響應

編輯

問題是json響應是一個對象,而不是數組,它沒有.length屬性。

你最好這樣做:

success: function(messages) {
      $('.messages').empty();
      $.each(messages,function(){
           $('.messages').append('<li class"error">' + this + '</li>\n');
               });
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM