从Ajax返回bool值

时间:2018-04-27 09:13:09

标签: ajax

我从 .aspx 页面调用以下函数,我想检查此函数是否返回truefalse。我尝试了很多东西,但结果却未定义。

我使用以下代码调用函数

 if (IsIncetiveAllowed())
    {
        sCondition = ".//LISTENTRY[VALUEID='" + m_sIncentiveReleaseId + "']";
        xmlNode = $(XMLCombos).xpath(sCondition)[0];
        XMLCombos.firstChild.removeChild(xmlNode);
    }

function IsIncetiveAllowed() {
$.ajax({
        cache: false,
        async: false,
        type: "POST",
        url: "pp060.aspx/CheckIncentiveAllowed",
        data: "{'typeOfApplication': '" + m_TypeOfMortgage + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {

            if (response.d)
                return true;
            else
                return false;
        },
        error: function (response) {
            MessageBox.Show("An error occurred checking IsIncetiveAllowed method.", null, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    });
}

请帮助!

3 个答案:

答案 0 :(得分:1)

如果您将回调函数传递给IsIncetiveAllowed(function(is_allowed) { if (is_allowed) { sCondition = ".//LISTENTRY[VALUEID='" + m_sIncentiveReleaseId + "']"; xmlNode = $(XMLCombos).xpath(sCondition)[0]; XMLCombos.firstChild.removeChild(xmlNode); } else { // Not allowed } }); function IsIncetiveAllowed(callback) { $.ajax({ cache: false, async: false, type: "POST", url: "pp060.aspx/CheckIncentiveAllowed", data: "{'typeOfApplication': '" + m_TypeOfMortgage + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { if (response.d) callback(true); else callback(false); }, error: function (response) { MessageBox.Show("An error occurred checking IsIncetiveAllowed method.", null, MessageBoxButtons.OK, MessageBoxIcon.Error); } }); } 函数,则可以在执行后使用ajax调用的结果执行代码。

{{1}}

答案 1 :(得分:0)

首先,您从不想要使用同步Ajax。同步Ajax会阻止浏览器,用户界面冻结,用户无法在同步请求加载时滚动,单击或执行任何操作。不要使用它们。

其次,将您的操作分解为单独的部分是有用的。你在这里有什么

  1. 部分可以将JSON发布到服务器
    这是最易于使用的部分,对于您要发布到任何网址的所有 JSON,它的工作方式相同。
  2. 知道如何与服务器上的特定端点通信的部分
    这是第二个最可重用的部分,它可以将任何数据发送到特定端点。
  3. 使用此端点的部件 这是可重用性最低的部分,它可以将特定数据发送到特定端点。
  4. 每个部件都有一个单独的功能是有意义的。 jQuery很容易支持,因为所有Ajax方法都返回promises,并且可以从函数到函数给出promise。

    第1部分,作为最大可重用性的jQuery扩展:

    $.fn.postJSON = function(url, data) {
        return $.ajax({
            type: "POST",
            url: url,
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(data)
        });
    };
    

    第2部分,作为一个独立的功能。请注意,我正在匹配远程API端点名称。您可以编写更多这样的函数来包装其他API端点。

    function checkIncentiveAllowed(typeOfApp) {
        return $.postJSON("pp060.aspx/CheckIncentiveAllowed", {
            typeOfApplication: typeOfApp
        }).fail(function (err) {
            MessageBox.Show("An error occurred in checkIncentiveAllowed method.", 
                null, MessageBoxButtons.OK, MessageBoxIcon.Error);
            console.log(err);
        });
    }
    

    第3部分,在事件处理程序中使用,例如:

    checkIncentiveAllowed(m_TypeOfMortgage).done(function (response) {
        var path = ".//LISTENTRY[VALUEID='" + m_sIncentiveReleaseId + "']",
            xmlNode = $(XMLCombos).xpath(path)[0];
    
        if (response.d && xmlNode) {
            xmlNode.parentNode.removeChild(xmlNode);
        } else {
            // not allowed
        }
    });
    

答案 2 :(得分:0)

这种情况正在发生,因为ajax调用是异步的。您可以将代码存在于if块中的ajax回调函数来实现您的逻辑