【问题标题】:jQuery Ajax form submit error handlingjQuery Ajax 表单提交错误处理
【发布时间】:2013-08-12 18:17:47
【问题描述】:

我有以下代码:

var url = "save.php"; // the script where you handle the form input.   

$.ajax({
        type: "POST",
        url: url,
        data: $("#frmSurvey").serialize(), // serializes the form's elements.

        success: function(){
            alert('success');
          },
        error: function(){
            alert( "Request failed: " );
          }

        }); 

现在,在向数据库提交数据时,这可以正常工作 - 但是,当我故意更改 save.php 文件以便不提交数据时,我仍然会收到 success 警报。

以下保存文件的代码:

$proc = mysqli_prepare($link, "UPDATE tresults SET ip = ?, browser = ?, q1 = ?, q2 = ?, q3 = ?, q4 = ?, q5 = ?, q6 = ?, q7 = ?, q8 = ?, q9 = ?, q10 = ?, q11 = ?, q12 = ?, q13 = ?, q14 = ?, q15 = ?, q16 = ?, q17 = ?, q18 = ?, q19 = ?, q20 = ?, q21 = ?, q22 = ?, q23 = ?, q24 = ?, q25 = ?, q26 = ?, q27 = ?, q28 = ?, q29 = ?, q30 = ?, q31 = ?, q32 = ?, q33 = ?, q34 = ?, q35 = ?, q36 = ?, q37 = ?, q38 = ?, q39 = ?, q40 = ?, q41 = ?, q42 = ?, q43 = ?, q44 = ?, q45 = ?, q46 = ?, q47 = ?, q48 = ?, q49 = ?, q50 = ?, q51 = ?, q52 = ?, q53 = ?, q54 = ?, q55 = ? WHERE respondent_id = ?;");
    mysqli_stmt_bind_param($proc, "ssiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiissi", $ip, $browser, $q1, $q2, $q3, $q4, $q5, $q6, $q7, $q8, $q9, $q10, $q11, $q12, $q13, $q14, $q15, $q16, $q17, $q18, $q19, $q20, $q21, $q22, $q23, $q24, $q25, $q26, $q27, $q28, $q29, $q30, $q31, $q32, $q33, $q34, $q35, $q36, $q37, $q38, $q39, $q40, $q41, $q42, $q43, $q44, $q45, $q46, $q47, $q48, $q49, $q50, $q51, $q52, $q53, $q54, $q55, $respondent_id);
    mysqli_stmt_execute($proc);
    $mysql_error = mysqli_error($link);
    if ($mysql_error!="") {
        printf("Unexpected database error: %s\n", $mysql_error);
        mysqli_stmt_close($proc);
        mysqli_clean_connection($link);
        exit();
    } else
    {
        mysqli_stmt_close($proc);
        mysqli_clean_connection($link);
        update_completion_status($respondent_id, 'Started');
        header("Location: index.php?r=".$rguid);
    }

我哪里出错了?

【问题讨论】:

  • 除非您返回不是 200 的状态码,或与所需数据类型不匹配的数据,否则将始终触发成功。
  • 尝试在你的 php 页面上引入一个错误.. 你会看到不同的。
  • 感谢 Kevin 的回复 - 我对 save.php 页面所做的更改意味着它不保存数据(列不匹配)但我仍然收到成功消息。
  • 对,但是服务器仍然返回 200。您需要它返回其他内容。您正在捕获错误然后返回一个字符串,状态码仍然是 200。
  • 嗨,Kevin,好的,关于如何确保返回不同的东西的任何指示?

标签: jquery ajax error-handling save


【解决方案1】:

我认为您不再在 POST 中提交数据这一事实并不意味着它应该自动抛出和错误。我不写 PHP,所以我不知道你的 save.php 做了什么,但假设它是一个有效的 HTTP POST 请求,在 POST 中发送数据然后什么都不做应该不会有任何非法行为。

【讨论】:

    【解决方案2】:

    您可能必须更改服务器的响应方式,并使其返回暗示错误而不是 200 OK 的不同 HTTP 标头。

    检查您的服务器返回的内容,并查看它为不存在的页面返回 404 状态。

    有用的 cmets,

    当我这样做时,它不会保存数据,但会显示“成功”消息。

    成功与您的数据库查询的成功不同。那是 ajax调用成功。如果你想检查mysql的错误,那么你 将需要做类似this answer 的事情。 查看我如何使用 php 文件返回成功或失败,然后处理 使用 jquery 的响应。

    如答案所示,在上面评论的链接中,ajax的成功可以 可见与我的php返回的成功明显不同。保持 如果您的所有数据库查询成功执行,请检查您的 php 文件, 如果不返回消息失败,即使返回此消息失败,ajax call 返回成功,因为 ajax 调用当然是成功的。 这就是你获取 php 文件的方式。

    【讨论】:

    • 感谢您的回复 - 它确实为不存在的页面返回 404。问题 - 我修改了 save.php 文件,以便 MySQL 在尝试提交时会抛出错误 - 例如列数不匹配。当我这样做时,它不会保存数据,但会显示“成功”消息。
    • 我已经添加了cmets来回答。
    • 感谢 Optimus - 这是有道理的,但我确实在 PHP 文件中进行了错误检查。 if ($mysql_error!="") {printf("Unexpected database error: %s\n", $mysql_error);} - 这是因为我正在后台处理保存文件吗?
    • 对不起,我没有得到你的问题。如果 $mysql_error!="",即发生了一些错误,我建议使用 echo "fail";exit(); 。因此返回给 ajax 的数据是“失败”,您检查 data=="fail" 并告诉用户文件无法保存。否则,如果您的数据库查询成功执行,则回显“成功”;并且在您的 ajax 调用中,您进行检查,如果 data=="success",则告诉用户文件已保存。早上再帮你。
    • 再次感谢,我想我知道发生了什么事 - 即使 PHP 页面上有错误 - 我处理它的方式意味着它不会阻止 index 页面处理或停止 Ajax 请求 - 我会玩一下代码 - 再次感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2015-10-24
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    相关资源
    最近更新 更多