0

ユーザーが何を入力したかどうかに応じて操作するJSONオブジェクトを返すAJAX呼び出しを行うユーザーフォームがあります。エラーが発生した場合 (たとえば、ユーザーが入力フィールドに何も入力していない場合)、入力ボックス名がエラー メッセージと共に返され、エラー配列に格納され、JSON オブジェクトで返されます。これは、入力ボックス名を取得し、jQuery を使用して DOM で検索し、エラーのある入力ボックスの後にエラー メッセージを含むスパンを配置するためです。私が抱えている問題は、JSON オブジェクトで返されたエラーをループすると、エラーのキー (入力名) にアクセスできず、配列の位置 (0,1,2,3,4 など) のみにアクセスできることです。 )。JSON/jQuery オブジェクトの関連配列キーにアクセスできますか、それともどこかで間違っていますか?

これが私のコードです(関連するコードのみを含めました):

これは AJAX コール リターンです。

success   :   function(data) {
if(data.errors == 'undefined' && data.errors == null) {                     
    ...
} else {
    jQuery(data.errors).each(function(k, v) {
        var html = "<span class='inputError'>" + v + "</span>";
        var errorSpan = '.signUpInputWrap input[name=' + k + ']';
        ...
    });
}

}

そのため、DOM でアクセスできるように、「k」(json で返される入力ボックス名) を使用しようとしていることがわかります。代わりに配列の位置を使用しますが、返された名前を使用する代わりに。

エラー配列を生成して返す PHP は次のとおりです。

$result = $this->validateInput($post);
..
if($result['result'] == true) {
...
} else {
echo json_encode(array('errors' => $result['errors']));
}

private function validateInput($input) {

    $errors = array();
    foreach($input as $key => $inputItem) {         
        if($key == 'sports_instructed' || $key == 'activities_qualified' | $key == 'sports_qualified') {
            continue;
        }
        if(empty($inputItem)) {
            if($key == 'dob' || $key == 'dobMonth' | $key == 'dobYear') {
                $errors['dob'] = "Please ensure all values are entered for date of birth";
                unset($input[$key]);
            }
            $pieces = explode('_', $key);
            foreach($pieces as &$piece) {
                $piece = ucfirst($piece);
            }
            $name = implode(" ", $pieces);
            $errors[$key] = "Please enter a value for " . $name;
        }

    }       
    if(empty($errors)) {
        $result = array('result' => true);
    } else {
        $result = array('result' => false, 'errors' => $errors);
    }
    return $result;
}

JSON の結果は次のとおりです (ご覧のとおり、キーは、jQuery を使用してループ内の要素を取得するために使用する入力名です)。

{"errors":{"first_name":"Please enter a value for First Name","last_name":"Please enter a value for Last Name","telNum":"Please enter a value for TelNum","dob":"Please ensure all values are entered for date of birth","dobMonth":"Please enter a value for DobMonth","address":"Please enter a value for Address","city":"Please enter a value for City","county":"Please enter a value for County","postcode":"Please enter a value for Postcode","password":"Please enter a value for Password","password_confirm":"Please enter a value for Password Confirm"}}

PHP と同じように、Javascrip/jQuery で関連配列にアクセスすることはできますか? ありがとう

4

3 に答える 3