【问题标题】:jQuery: How to get the data value after Ajax calljQuery:如何在 Ajax 调用后获取数据值
【发布时间】:2012-11-28 21:28:50
【问题描述】:

我已经阅读了一些关于此的其他问题,但我仍然无法弄清楚如何让它发挥作用。

我有这个函数进行 ajax 调用:

    function validateDataPoint(newDataPoint) {
        var $form = $(this).parents('form');
        var $formAction = $form.attr('action');
        var $validationResult;

        return $.ajax({
            type: "POST",
            url: "/DataPoints/ValidateNewDataPointBeforeSaving",
            data: newDataPoint
        });

        return $validationResult;
    }

这就是我在另一个函数中调用它的方式:

        var validationRequest = validateDataPoint(newDataPoint);
        validationResult = validationRequest.success(function (data) {
            return data.Urn;
        });

然后在同一个函数中,我想测试validationResult 的值,因为data.Urn 与在服务器端完成的处理相关的字符串值要么是“Success”,要么是“Failed”。

下面是代码:

        //post the Json object to the server to validate and get the result
        var validationRequest = validateDataPoint(newDataPoint);
        validationResult = validationRequest.success(function (data) {
            return data.Urn;
        });

        //based on the result give the thumbs-up or thumbs-down
        if (validationResult == "Success") {
            resultFlag = "<span class='badge badge-success'><i class='icon-thumbs-up icon-white'></i></span>";
        }
        else if (validationResult == "Failed") {
            resultFlag = "<span class='badge badge-important'><i class='icon-thumbs-down icon-white'></i></span>";
        }
        else {
            resultFlag = "<span class='badge badge-warning'></span>";
        }

所以问题是...

当我尝试访问 validationResult.responseText 的值时,我得到一个未定义的错误。基本上我想将 data.Urn 的值分配给 validationResult 但我无法让它工作。如果我提醒(验证结果);我得到 [object Object] 然后如果我 alert(validationResult);我不确定。

我在这里错过了什么?

【问题讨论】:

    标签: jquery


    【解决方案1】:

    jQuery 的 ajax 函数以异步方式工作。在 ajax 实际完成之前,您对 validationResult 的检查正在发生。

    为什么不把它们放在回调中?

    validationResult = validationRequest.success(function (data) {
        processResponse(data.Urn);
    });
    
    function processResponse(validationResult)
    {
        //based on the result give the thumbs-up or thumbs-down
        if (validationResult == "Success") {
            resultFlag = "<span class='badge badge-success'><i class='icon-thumbs-up icon-white'></i></span>";
        }
        else if (validationResult == "Failed") {
            resultFlag = "<span class='badge badge-important'><i class='icon-thumbs-down icon-white'></i></span>";
        }
        else {
            resultFlag = "<span class='badge badge-warning'></span>";
        }
    }
    

    【讨论】:

    • 我确实尝试过类似的方法。然后我遇到的问题是让 resultFlag 的值稍后在同一个函数中使用。所以使用你的例子,我最终会得到:validationResult = validationRequest.success(function (data) { processResponse(data.Urn); }); need to begin using the value of resultFlag here
    • 嗯,这就是异步方法的本质。你将不得不处理这个问题。除此之外,理论上您可以将 ajax 请求更改为与 async: false 同步,但不建议这样做 - 请参阅 api.jquery.com/jQuery.ajax
    • 事实证明我用来解决这个问题的方法是完全错误的。我正在遍历一个数组并建立一个表格来显示数据行,然后将表格的整个字符串转储到一个 dom 元素中。所以我把代码扔进垃圾箱,然后重新开始。这一次,我决定使用使用 mustache.js 库的模板,然后使用 jQuery $.append 函数将新的 tr 附加到表中。所有这些都是在validationResult 中完成的,现在一切都按预期工作,并且代码行数减少了很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多