0

我已经使用 jQuery 构建了一个简单但有效的 AJAX 表单。表单在提交之前使用 jQuery 进行验证,然后在成功提交后再次使用 PHP 进行验证。

唯一的问题是错误处理。当 PHP 检查返回所有字段都正常时,我会显示一条成功消息。如果出现错误,我只会显示“出现错误”。
如何将数据从 PHP 发送回 jQuery,以便将无效字段标记为无效?

或者这种形式的错误处理是不必要的,因为动态突出显示需要打开 JavaScript,如果打开 JavaScript,表单就不能提交错误?

基本上,我的有效支票看起来像这样(当然简化了):

function checkSomething( $something ) {

        $valid = true;

        if ( strlen( $something ) === 0 ) {
            $valid = false;
        }


        return $valid;
} 

在脚本的最后,我这样做:

if ( checkSomething( $something ) && checkThis( $this ) && checkThat( $that ) ) {
    echo "success"; 
} else {
    echo "error";
}

在我的 JavaScript/jQuery 代码中,它看起来像这样:

$.ajax({
    url: "form.php",
    type: "POST",
    data: string,
        success: function ( result ) {
            if ( result == "success" ) {
                alert( "success" );                     
            } else {
                alert( "error" );
            }
        }
});
4

3 回答 3

1

我认为您应该在 PHP 中只有一项服务。您从表单发送数据,如果有任何无效数据,您可能希望返回一个 JSON 指示哪些字段是错误的,以便您可以解析并显示它。如果一切正常,您只需显示该成功消息。

不过,我不确定我是否明白你的问题。

于 2013-02-15T20:28:16.580 回答
1

您的表单提交有 3 个步骤:JavaScript 验证和提交、PHP 验证/处理和 JavaScript 完成(“因此可以将无效字段标记为无效”)

听起来您已经完成了第 1 步和第 2 步的大部分内容。

在您的 PHP 代码中,您应该有一些数据结构,最好是一个数组,它保存哪些值是无效的。您可以通过将其回显到浏览器来将此数据返回给浏览器

<?php
...
...
if( count( $invalidFieldArray ) ){
    echo json_encode( array( 'status' => 'Fail',
                             'data' => $invalidFieldArray ) );
}else{
    echo json_encode( 'status' => 'Success' );
}

上面的代码会将成功/失败返回到您的 JavaScript 表单。

我个人使用一个jQuery 表单插件来处理表单提交,我建议你尝试一下。它有许多开箱即用的好功能。

$.ajax({
    url: "form.php",
    type: "POST",
    data: string,
    dataType: json,
        success: function ( result ) {
            if ( result.status === "Success" ) {
                alert( "success" );                     
            } elseif (result.status === 'Fail'){
                for (field in result.data) {
                         /* Invalid field handling */
                         ...
                } 
            }
        }
});

提示:有点题外话,但在 JavaScript 中使用比较时,总是使用三等号( === ),双等号( == )在 JavaScript 中与在其他语言中不同;JavaScript 确实使用双等号进行类型强制,这提供了不一致的结果。

于 2013-02-15T20:47:23.180 回答
0

可以从 PHP 发送数据并将其存储在 URL 中,如下所示url.com/#value=1

于 2013-02-15T20:23:26.713 回答