1

我有以下代码:

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);
    }

我哪里错了?

4

2 回答 2

2

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

于 2013-08-12T18:23:30.530 回答
1

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

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

有用的评论,

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

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

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

于 2013-08-12T18:23:54.623 回答