【问题标题】:About AJAX , FORM AND PHP关于 AJAX , FORM 和 PHP
【发布时间】:2014-09-04 07:24:23
【问题描述】:

我的 ajax 代码如下所示,它检查注册表单用户名、电子邮件等...

jQuery(document).ready(function($) {
$("#formform").on('change', 'input',function(event){
    var $form = $(this);
    var $inputs = $form.find("input, select, button, textarea");
    var serializedData = $form.serialize();
    $inputs.prop("disabled", true);

    request = $.ajax({
        url: "/registration_check.php",
        type: "post",
        data: {formData:serializedData},
        datetype: "JSON"
    });
    request.done(function (response, textStatus, jqXHR){
        console.log(response);
    });
    request.fail(function (jqXHR, textStatus, errorThrown){
        console.log("error");
    });
    request.always(function () {
        $inputs.prop("disabled", false);
    });
    event.preventDefault();
});
});

我的 PHP 看起来像这样:

$get_form_data=$_POST["formData"];
parse_str($get_form_data,$form_data);

if(isset($form_data["username"])){
    if(strlen($form_data["username"])<5){
        echo "Username must be at least 5 character";
    }else{
        if(ValidUserName($form_data["username"])){
            if($checkUser->checkUserName(char_encoder($form_data["username"]))==true){
                echo "Sorry this UserName Already Exist";
            }else{
                echo "UserName Available";
            };
        }else{
            echo "Invalid Username";
        }

    }

}

现在当 Invalid Username 来自 AJAX 作为响应时,我如何禁用表单?

虽然我应该使用return false..但不知道如何处理响应?

【问题讨论】:

  • 您拥有$inputs.prop("disabled", false);,它将在响应后始终启用您的字段。
  • 检查“数据”,在 Ajax 响应中,if (data == "Invalid Username"){event.preventDefault();}
  • Pratik 它只是无效用户名的 php 示例,还有更多内容,例如无效电子邮件、无效密码、无效详细信息和 bla bla bla :( 事情变得更复杂了不是吗?

标签: javascript php jquery ajax


【解决方案1】:

尝试以下格式,您可以在成功事件中处理响应:

var $form = $(this);
var serializedData = $form.serialize();
$.ajax({
    type: "POST",
    url: "/registration_check.php",
    data: {
        formData:serializedData
    },
    beforeSend: function () {
        //do stuff like loading process until you get the response
    },
    success: function (resp) {
        var obj = jQuery.parseJSON(resp);
        //console.log(obj); // this will display response in console.
        //do stuff here

    },
    error: function(e){
        alert("Error in ajax call: "+e);
    } 

}); // complete AJAX  

PHP 代码:

$array = array();
if (isset($form_data["username"])) {
    if (strlen($form_data["username"]) < 5) {
        $array['success'] = false;
        $array['message'] = "Username must be at least 5 character";
    } else {
        if (ValidUserName($form_data["username"])) {
            if ($checkUser->checkUserName(char_encoder($form_data["username"])) == true) {
                $array['success'] = false;
                $array['message'] = "Sorry this UserName Already Exist";
            } else {
                $array['success'] = true;
                $array['message'] = "UserName Available";
            }
        } else {
            $array['success'] = false;
            $array['message'] = "Invalid Username";
        }
    }
    echo json_encode($array);
}  

【讨论】:

  • 当 php 发送无效用户名、无效电子邮件等时如何禁用表单 .. :(
  • 您可以在成功回调函数中处理该问题,就像在成功回调中收到无效电子邮件一样,您可以清空该文本框并显示您从 json 对象中的 php 文件获取的消息。
  • 是的,伙计......真的很感谢......非常干净地解决了我的问题......你很棒:)
【解决方案2】:

在表单提交事件上进行 ajax 调用,如果 ajax 返回任何错误,请调用 event.preventDefault();。 希望对您有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多