【问题标题】:Sending data from PHP to jQuery将数据从 PHP 发送到 jQuery
【发布时间】:2013-01-31 21:38:41
【问题描述】:

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

【问题讨论】:

  • 您需要从 PHP 中回显更多内容,告诉您失败的原因,然后使用 JS 处理该响应以显示任何适当的消息。发布一些代码并向我们展示您现在是如何设置它的,这样会更容易提供帮助。
  • 如果你有 jQuery 验证并且启用了 JS,你的 PHP 验证可能永远不会发挥作用(它只是为了预防起见)。换句话说,如果您的客户端验证正常工作,那么您的服务器端验证将不会有任何消息要发回。如果您的客户端验证被禁用或绕过,那么您的服务器端验证将接管。如果客户端的 JS 被禁用,那么无论如何您都无法通过 jQuery 发回任何消息。也显示代码。
  • 他仍然应该返回一个 JSON 响应。如果它被绕过,这并不意味着 Javascript 被禁用。即使是这样,它也应该返回 JSON 响应,如果禁用 Javascript,它将在浏览器中简单地显示为文本。

标签: php jquery ajax forms error-handling


【解决方案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 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 确实使用双等号进行类型强制,这会导致结果不一致。

【讨论】:

  • 酷,谢谢!我相信我终于明白了这是如何工作的。但是,我仍然收到一个 PHP 错误 Parse error: syntax error, unexpected T_DOUBLE_ARROW - 我也尝试了 : 而不是 =&gt;,但没有任何运气。 $invalidFieldArray 看起来像这样:Array ( [name] =&gt; Please enter a name. [email] =&gt; You need to enter an email address. [message] =&gt; Please enter a message. ) 你知道发生了什么吗?或者现在这太复杂了?
【解决方案2】:

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

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

【讨论】:

  • 这是两个建议中更好的一个。返回带有字段的 JSON,以及您希望显示的每个字段的错误消息。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2019-01-07
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多