【问题标题】:Returning Response in jquery ajax function在 jquery ajax 函数中返回响应
【发布时间】:2014-03-24 21:59:41
【问题描述】:

在 Response.d 中遇到问题,基于 checkusers() 函数返回的结果,我正在保存值。如果输入的名称已经在数据库中,它应该说“用户已经存在”,如果它不在数据库中,它应该创建一个新记录。

但我没有从 (response) 获得正确的值,我观察到 Console.log(response.d) 给了我正确的值,例如“true”或“false”。我尝试了我所知道的一切,比如-

  1. 改变 async:"false"
  2. var jqXHR = $.ajax({ 并返回 jqXHR.responseText

但它们都不适合我。请帮我解决这个问题。

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


    }



});
}

【问题讨论】:

  • 对于初学者,您应该将数据类型更改为 JSON,而不是“jsondata”。

标签: javascript jquery ajax


【解决方案1】:

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

这里有几个选项:

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

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

  3. 如果尚未创建用户,第三种选择是从 CheckUser Ajax 调用中的成功回调中调用 create ajax 调用。

我会推荐选项 2 或 3,因为选项 1 对用户不友好。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多