将Bool返回给AJAX请求

时间:2017-03-13 21:32:38

标签: javascript c# jquery asp.net ajax

这一定是一个非常简单的答案,但我看不出我出错的地方。

只需输入带有c#代码的测试AJAX请求。我无法让c#返回true / false语句,或者我无法让AJAX将其识别为true / false。

  [WebMethod]
    public static bool testme(int testnumber)
    {
        if (testnumber < 12)
        {
            return true;             }
        else
        {

            return false;
                }

    }

AJAX:

<script>
        $(document).ready(function () {
            $('#test').click(function () {
               $.ajax({
                   type: "post",
                    url: "WebForm1/testme",
                    data: { testnumber: 13 },
                    contentType: "application/json; charset=utf-8",
                    datatype: "json",
                    success: function (data) {
                        if (data) {
                            console.log("true");
                        }
                        else {
                            console.log("false");
                        }
                    },
                    Error:function(error){
                        console.log("error");
                    }
                });
            });
        })


    </script>

按钮:

<input type="button" id="test" value="click me"/>

console.log显示为true,即使我输入的数字大于12,它应该从c#方法返回“false”bool。

console.log is returning a full page render see picture

4 个答案:

答案 0 :(得分:0)

您的if(data)支票检查是否真实,data将成为一个对象,因此请查看它的属性,然后您就可以找到C#的结果。

如果您不熟悉JS的真实性,请查阅以获得更好的描述:但如果每个变量都有一个有效值,如果它是null或未定义(或0或0),则认为它们是真实的&#39;&#39;)那么它将不会被认为是真实的,并且将无法进行布尔检查。

答案 1 :(得分:0)

当您从这样的WebMethod获得响应时,您必须使用.d来引用该值。您当前的代码只是检查您是否得到了响应,并且很可能总是评估为true。

<script>
        $(document).ready(function () {
            $('#test').click(function () {
               $.ajax({
                   type: "post",
                    url: "WebForm1/testme",
                    data: { testnumber: 13 },
                    contentType: "application/json; charset=utf-8",
                    datatype: "json",
                    success: function (data) {
                        if (data.d) {
                            console.log("true");
                        }
                        else {
                            console.log("false");
                        }
                    },
                    Error:function(error){
                        console.log("error");
                    }
                });
            });
        })
    </script>

可以帮助您弄清楚发生了什么的一个指针是使用浏览器开发人员工具(F-12)的网络选项卡来查看从服务器返回的响应格式。它不会返回true或false它返回d: trued: false因此我提到的更改。

答案 2 :(得分:0)

每当我必须使用Ajax时,我都会从函数JSON对象返回。 例如:

return Json(new { result = true });

并在AJAX中:

<script>
        $(document).ready(function () {
            $('#test').click(function () {
               $.ajax({
                   type: "post",
                    url: "WebForm1/testme",
                    data: { testnumber: 13 },
                    contentType: "application/json; charset=utf-8",
                    datatype: "json",
                    success: function (data) {
                        if (data.result === true) {
                            console.log("true");
                        }
                        else {
                            console.log("false");
                        }
                    },
                    Error:function(error){
                        console.log("error");
                    }
                });
            });
        })


  </script>

答案 3 :(得分:0)

事实证明它相对简单,但不确定为什么需要这样做。我得到了https://forums.asp.net/t/2023743.aspx?Ajax+Webmethod+not+firing+

的帮助

我需要改变 //settings.AutoRedirectMode = RedirectMode.Permanent; 到

settings.AutoRedirectMode = RedirectMode.Off;

到我的RouteConfig.cs,然后一切正常。

如果有人知道为什么在添加System.Web.Services时不会自动更改;或者这意味着我想知道,无论如何,现在一切都很好。