c# - 如何在 javascript 函数中从 JQuery 调用 asp.net 中的 [web 方法] 返回 false

标签 c# javascript jquery asp.net

所以在 default.aspx 中我有代码

 <script type="text/javascript">
    function validateForm() 
            {     

        test();
        //here should return true or false and exit validateForm so not to run InsertUpdateData()

    InsertUpdateData()

        }

  </script>     


<script language="javascript" type="text/javascript">

(function test() {
    var areaId = 98;
    $.ajax({
        type: "POST",
        url: "GridViewData.aspx/GetRegions",
        data: "{areaId:" + areaId + "}",
        //data:99 ,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function artybones(data) {
            // alert(data.d);
            if (data.d == "Foo 98")
            { alert("its true"); }
            else
            { alert("its false"); }

        }
    });
});     

</script>

在 GridViewData.aspx 中我有

<script runat="server">     

    [WebMethod]     
    public static string GetRegions(int areaId)     
    {        
        return "Foo " + areaId;     
    } 

    </script> 

当我从 javascript 调用 test() 时,我希望它返回 false,但似乎无法从测试中获取值。有人可以发布代码来执行此操作吗?我知道我已经很接近了..提前感谢那些发帖的人..

最佳答案

不要将测试函数包装在准备好的 DOM 中。您也不必为 ajax 成功命名该函数,因为您是在创建该函数时定义该函数的。最后,你的 ajax 调用中的 data: 参数搞砸了。当大括号应该位于 JSON 数据之外时,您可以将它们放在引号中。就像 {areaId:areaId} 这样,您可以在 JSON 对象上设置参数。您将该参数称为“areaId”,并将其设置为等于您也称为areaId 的变量。这没有什么问题,但是如果将areaId设置为areaId令人困惑,那么在javascript中更改变量名称var clientAreaId = 98;那么它会更容易阅读和理解{areaId : clientAreaId }

这样做:

<script language="javascript" type="text/javascript">

function test() {
    var areaId = 98;
    var isTrue = false;
    $.ajax({
        type: "POST",
        async: false,
        url: "GridViewData.aspx/GetRegions",
        data: { areaId: areaId },
        //data:99 ,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            // alert(data.d);
            if (data.d == "Foo 98")
            { alert("its true");
              isTrue = true; }
            else
            { alert("its false");
              isTrue = false; }
        }
    });
    return isTrue;
}    

</script>

然后在您的测试调用中执行以下操作:

if (test() == true)
    InsertUpdateData();

您不需要将命名函数包装在 DOM 中,因为它们在被调用之前不会被执行。但是,如果您在页面加载时调用 test() ,那么我会将该调用包装在 DOM 中:

$(测试);

最后,按照 Guffa 的建议,通过在 ajax 调用中的参数中添加 async: false 将您的请求转换为同步请求。

关于c# - 如何在 javascript 函数中从 JQuery 调用 asp.net 中的 [web 方法] 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5186169/

相关文章:

c# - 避免在以下遗留代码中进行大量代码更改的优雅方法

javascript - 三个JS轨道相机短旋转

javascript - JavaScript 可以创建无效的 DOM 是否正常?

jquery 弹出图像

javascript - html javascript中的无限滚动

c# - 如何清除 WPF 列表框?

c# - IEnumerable 包含 IEnumerable

c# - 如何选择多列的计数

javascript - jQuery:按键时在两个单选按钮之间切换

javascript - Jquery复选框仅在选中取消选中然后选中时切换