【问题标题】:Returning Bool to AJAX request返回 Bool 到 AJAX 请求
【发布时间】:2017-03-13 21:32:38
【问题描述】:

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

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

  [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 显示为真,即使我输入的数字大于 12,这应该从 c# 方法返回“假”布尔值。

【问题讨论】:

  • 可能数据类型需要是bool而不是JSON?
  • 不,这只是停止整个 AJAX 请求,还有其他想法吗?

标签: javascript c# jquery asp.net ajax


【解决方案1】:

您的if(data) 检查是检查真实性,data 将是一个对象,所以查看它的属性,您可以找到 C# 的结果。

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

【讨论】:

  • 那么检查属性的代码是什么,我已经尝试过 data.properties 但我找不到重载方法?有什么帮助吗?
  • 我倾向于只使用console.log(data); 并且在开发者工具中你应该能够检查它
  • 问题在于,console.log(data) 在开发者工具控制台中给了我完整的页面脚本,而不是一个结果
  • 向@MitchelSellers 寻求帮助,我没有使用 C# 后端的经验,根据我的经验,它要么是路由问题,要么是错误请求
  • 谢谢,希望它很简单,但我做错了什么
【解决方案2】:

当您从这样的 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,因此我提到了更改。

【讨论】:

  • 这仍然不起作用,现在得到错误的回报,即使我已将“测试编号”更改为 11
  • 是否通过开发者工具返回了正确的值? (你能张贴你在那里看到的回报吗)
  • 通过开发者工具,如果我 console.log(data.d) 我得到未定义,如果我 console.log(data) 我得到控制台中的整页脚本
  • 好的,这有助于确定它,听起来你没有正确地使用网络方法,但实际上是一个完整的页面渲染
  • 对于 URL,我正在使用 WebForm/testme(这是方法的名称)我应该如何访问该方法?
【解决方案3】:

每当我必须使用 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>

【讨论】:

    【解决方案4】:

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

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

    settings.AutoRedirectMode = RedirectMode.Off;

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

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

    【讨论】:

      猜你喜欢
      • 2013-04-23
      • 2011-10-19
      • 2016-03-31
      • 1970-01-01
      • 2016-01-19
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多