将数据从PHP发送到jQuery

时间:2013-02-15 20:22:03

标签: php jquery ajax forms error-handling

我使用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" );
            }
        }
});

3 个答案:

答案 0 :(得分:1)

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

我不确定我是否会遇到你的问题。

答案 1 :(得分:1)

您的表单提交有3个步骤:JavaScript验证&完整提交,PHP验证/处理和JavaScript('因此无效字段可以标记为无效')

听起来你已经完成了第1步,而且大部分都是第2步。

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

将此数据返回给浏览器
<?php
...
...
if( count( $invalidFieldArray ) ){
    echo json_encode( array( 'status' => 'Fail',
                             'data' => $invalidFieldArray ) );
}else{
    echo json_encode( 'status' => 'Success' );
}

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

我个人使用jQuery form plugin来处理表单提交,我建议您尝试一下。它具有许多开箱即用的功能。

$.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使用double equals键入强制,这会产生不一致的结果。

答案 2 :(得分:0)

可以从PHP发送数据并将其存储在网址中,例如url.com/#value=1