在jquery ajax函数中返回响应

时间:2014-03-24 13:47:49

标签: javascript jquery ajax

在Response.d中获取问题,基于checkusers()函数返回的结果我保存了值。如果输入的名称已经在数据库中,则应该说“#34;用户已经存在"”,如果它不在数据库中则应该创建新记录。

但我没有从(响应)中得到正确的值,我发现Console.log(response.d)给了我正确的值,例如' true'或者' false'。我尝试了我所知道的一切 -

  1. 更改异步:" false"
  2. var jqXHR = $.ajax({并返回jqXHR.responseText
  3. 但他们都没有为我工作。请帮帮我。

    submitHandler: function (form) {
    
            var txtName = $("#txtName").val();
            var txtEmail = $("#txtEmail").val();
            var txtSurName = $("#txtSurName").val();
            var txtMobile = $("#txtMobile").val();
            var txtAddress = $("#txtAddress").val();
    
            var obj = CheckUser();
            if (obj == false) {
                $.ajax({
                    type: "POST",
                    url: location.pathname + "/saveData",
                    data: "{Name:'" + txtName + "',SurName:'" + txtSurName + "',Email:'" + txtEmail + "',Mobile:'" + txtMobile + "',Address:'" + txtAddress + "'}",
                    contentType: "application/json; charset=utf-8",
                    datatype: "jsondata",
                    async: "true",
                    success: function (response) {
    
                        $(".errMsg ul").remove();
                        var myObject = eval('(' + response.d + ')');
                        if (myObject > 0) {
                            bindData();
                            $(".errMsg").append("<ul><li>Data saved successfully</li></ul>");
                        }
                        else {
                            $(".errMsg").append("<ul><li>Opppps something went wrong.</li></ul>");
                        }
                        $(".errMsg").show("slow");
                        clear();
    
                    },
                    error: function (response) {
                        alert(response.status + ' ' + response.statusText);
                    }
    
    
                });
            }
            else {
    
                $(".errMsg").append("<ul><li>User Already Exists </li></ul>");
                $(".errMsg").show("slow");
    
            }
    
        }
    
    });
    
    $("#btnSave").click(function () {
        $("#form1").submit()
    
    });
    });
    

    checkusers功能是:

    function CheckUser() {
    
      var EmpName = $("#txtName").val();
    
        $.ajax({
    
        type: "POST",
        url: location.pathname + "/UserExist",
        data: "{Name:'" + EmpName + "'}",
        contentType: "application/json; charset=utf-8",
        datatype: "jsondata",
        async: "true",
        success: function (response) {
            console.log(response.d);
    
        },
        error: function (response) {
            alert(response.status + ' ' + response.statusText);
    
    
        }
    
    
    
    });
    }
    

1 个答案:

答案 0 :(得分:2)

仅仅因为您的数据库返回true或false并不意味着CheckUser()也会返回它。

这里有几个选项:

  1. 要么在CheckUser中创建局部变量,要使Ajax调用同步,在成功函数中将局部变量设置为response.d,然后返回该局部变量。

  2. 另一种选择是使用Deferred对象并使您的submithandler Ajax调用等待Checkuser Ajax调用返回;

  3. 第三个选项是,如果尚未创建用户,则在CheckUser Ajax调用中通过成功回调调用create ajax调用。

  4. 我建议使用选项2或3,因为选项1不是用户友好的。