【问题标题】:Can't get data from controller using jquery无法使用 jquery 从控制器获取数据
【发布时间】:2019-08-20 21:20:27
【问题描述】:

我在这里遗漏了什么吗?我只想要一个警报框来给我控制器操作中的字符串值。 我不断在开发工具中收到内部服务器错误消息

        public JsonResult Button_Click()
        {
            string cam = "Hello";

            return Json(cam, JsonRequestBehavior.AllowGet);
        }
        $("#hello").click(function () {
            $.ajax({
                url: '/Mycontroller/Button_Click/',
                type: "GET",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    alert(data);
                },
                failure: function () {
                    alert("FAIL");
                },
                error: function () {
                    alert("ERROR");
                }
            });
        });   
    });

我应该得到一个带有“Hello”的警告框。

【问题讨论】:

  • 旁注:contentType: "application/json; charset=utf-8" 可以删除。 GET 请求没有任何正文内容,因此它也不能(有意义地)具有内容类型。
  • 无论如何,如果您收到内部服务器错误,则意味着您的 ASP.NET 应用程序在某个地方崩溃了。您需要使用调试器单步执行它,和/或检查服务器上的事件日志以查看它是否记录了底层异常,这将为您提供更多信息。
  • 尝试在方法名和ajax url调用中不带下划线。
  • 因此,ajax 调用中的内部服务器错误也可能意味着您访问了错误的端点。尝试使用'@Url.Action("Button_Click", "MyController")'
  • 另外,我看不到在 Button_Click 方法上装饰的 [HttpGet] 属性。

标签: c# jquery asp.net ajax asp.net-mvc


【解决方案1】:

我正在试验,看起来这对我有用:

return new JsonResult(){ Data=cam, JsonRequestBehavior=JsonRequestBehavior.AllowGet };

代替:

return Json(cam, JsonRequestBehavior.AllowGet);

至于解释,我[还没有]。奇怪的是,在 Ajax 中使用 Post 而不是 Get 可以正常工作。我希望这个对你有用。

【讨论】:

    【解决方案2】:

    您的服务器端代码是正确的,但在 javascript 中您添加了额外的大括号,

    如果我已经尝试过并且工作正常,只需删除额外的 )}; 即可删除此脚本看起来像

    $("#hello").click(function () {
                $.ajax({
                    url: '/Mycontroller/Button_Click/',
                    type: "GET",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        alert(data);
                    },
                    failure: function () {
                        alert("FAIL");
                    },
                    error: function () {
                        alert("ERROR");
                    }
                });
         }); 
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      不要写“Mycontroller”,而是只写“My”。不需要“控制器”后缀。

      这应该可以工作

      Javascript:

                      $("#hello").click(function () {
                      $.ajax({
                          url: '/My/Button_Click/',
                          type: "GET",
                          dataType: "json",
                          contentType: "application/json; charset=utf-8",
                          success: function (data) {
                              alert(data);
                          },
                          failure: function () {
                              alert("FAIL");
                          },
                          error: function () {
                              alert("ERROR");
                          }
                      });
                  }); 
      

      行动:

      public JsonResult Button_Click()
          {
              string cam = "Hello";
      
              return Json(cam, JsonRequestBehavior.AllowGet);
          }
      

      HTML:

      <span id="hello">Click Me</span>
      

      【讨论】:

        【解决方案4】:
            public JsonResult Button_Click()
                    {
                        string cam = "Hello";
        
                  return Json(new { result = true,data=cam }, JsonRequestBehavior.AllowGet);
        
                    }
        
        
        
              $("#hello").click(function () {
                        $.ajax({
                            url: '/Mycontroller/Button_Click/',
                            type: "GET",
                            dataType: "json",
                            contentType:'text/xml; charset=utf-8',
                            success: function (result) {
                                  if(result.result==true)
                                  {
                                    alert(result.data);
                                  } 
                            },
                            failure: function () {
                                alert("FAIL");
                            },
                            error: function () {
                                alert("ERROR");
                            }
                        });
                    });   
                });
        
        you return direct data so your data not display 
        my changes help you
        

        【讨论】:

        • 这将如何准确地防止内部服务器错误?
        • 我只看到他想要什么输出,所以我看不到他的问题,我很快回复我认为这个解决方案对他们有用。现在我认为 Content-type remove for 在这种情况下 contentType: 'text/xml; charset=utf-8',
        • 没有人要求您建议的输出更改。那不是问题。他只想要一个简单的字符串。是的,您可以删除内容类型,它没有用,因为 GET 请求不包含正文,所以无论如何都没有内容。
        • 我是说删除内容类型 contentType: "application/json; charset=utf-8", 并替换为 am write 像 contentType: '文本/xml; charset=utf-8'
        • 对不起,我看错了你的评论,但也许那是因为你的建议太奇怪了。为什么 XML 在这里有用?您在 OP 的代码中看到 XML 了吗?就像我说的,GET 请求不发送任何正文内容,因此指定内容类型没有任何意义。你只是猜测,还是有某种理由建议这样做?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-28
        • 1970-01-01
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        相关资源
        最近更新 更多