【问题标题】:Jsonresult is failing with parameter in my Ajax Call. Why is it happening?Jsonresult 在我的 Ajax 调用中使用参数失败。为什么会这样?
【发布时间】:2016-04-17 03:00:39
【问题描述】:

在我看来,这是我的剧本。

    $(function () {
        $('#buttonx').on("click", function (e) {
            e.preventDefault();
            $.ajax({
                url: 'Ficha/VerificarPatrocinador',
                contentType: 'application/json; charset=utf-8',
                type: 'GET',
                dataType: 'json',
                data: {i: 100036},
                success: function (data) {
                    $(data).each(function (index, item) {
                        //$('#NomePatr').append(item.Nome)
                        $("#NomePatr").val(item.Nome);
                    });
                }
            });
        });
    });

</script>

这是我对控制器的操作。

    public JsonResult VerificarPatrocinador(int i)
    {
        var db = new FMDBEntities();
        db.Configuration.ProxyCreationEnabled = false;
        db.Configuration.LazyLoadingEnabled = false;

        var consulta = db.Tabela_Participante.Where(p => p.ID_Participante == i);
        return Json(consulta.
            Select(x => new
            {
                Nome = x.Nome
            }).ToList(), JsonRequestBehavior.AllowGet);
    }

我是 Ajax/Jquery 的新手,当我排除参数时没问题,但是,当我尝试将数据: {i: 100036} 放入我的脚本中并将参数放入我的操作中时。它不起作用。为什么会这样? 控制器运行良好。该参数甚至通过,但我无法在我的视图中返回此结果。 谢谢。

【问题讨论】:

  • 删除contentType: 'application/json; charset=utf-8',(您没有对数据进行字符串化)。您还应该使用url: '@Url.Action("/VerificarPatrocinador", "Ficha")', 来确保正确生成您的网址

标签: javascript jquery json ajax asp.net-mvc


【解决方案1】:

在你的控制器方法上使用 [HttpPost] 属性

[HttpPost]
 public JsonResult VerificarPatrocinador(int i)
    {
        //Write Your Code
    }

并将 ajax 类型属性从“GET”更改为“POST”并使用 JSON.stringify。还要仔细检查网址。你的 ajax 应该是这样的

$(function () {
        $('#buttonx').on("click", function (e) {
            e.preventDefault();
            $.ajax({
                url: 'Ficha/VerificarPatrocinador',
                contentType: 'application/json; charset=utf-8',
                type: 'POST',
                dataType: 'json',
                data: JSON.stringify({i: 100036}),
                success: function (data) {
                    $(data).each(function (index, item) {
                        //$('#NomePatr').append(item.Nome)
                        $("#NomePatr").val(item.Nome);
                    });
                }
            });
        });
    });

希望对你有帮助

【讨论】:

  • 非常感谢。 Md. Mostafizur Ra​​hman。我忘记了“JSON.stringify”。只是最后一个问题。如果我想放一个 texbox id 而不是 100036 怎么办?我该怎么说?谢谢。 :D
  • 如果您删除contentType: 'application/json; charset=utf-8', 选项,则不需要JSON.stringify()(这两个都不需要)。而且您当然不需要在方法上使用[HttpPost]
【解决方案2】:

我认为@StephenMuecke 可能正在做某事,因为我能够通过一个新项目重现(预期的)逻辑。

首先要确定代码出错的地方:服务器还是客户端。

尝试使用 Visual Studio 调试器,并在 VerificarPatrocinador 中放置一个断点。然后运行客户端代码,看看是否命中了断点。成功后,说明问题出在客户端。

从那里使用网络浏览器的调试器来确定发生了什么。对来自.ajax 的返回结果使用.fail 函数以确定HTTP 调用是否失败。以下是一些可用于分析故障的示例代码:

.fail(function (jqXHR, textStatus, errorThrown) {
    alert(textStatus);
});

欲了解更多信息,请查看http://api.jquery.com/jquery.ajax/

【讨论】:

    【解决方案3】:

    ajax 成功后更改以下代码

    $.each(data, function (index, item) {
         $("#NomePatr").val(item.Nome);
    });
    

    因为当您将数据作为数组、数组或集合的对象获取时,您可以使用此语法进行迭代,然后您可以传递给 var、dom...等等您想要显示或获取的位置。

    jQuery.each() 表示$(selector).each() 您可以使用如下语法的 dom 元素:例如

        <ul>
          <li>foo</li>
          <li>bar</li>
        </ul>
        <script>
         $("li").each(function( index ) {
           console.log( index + ": " + $( this ).text() );
         });
        </script>
    

    使用 GET 可以正常工作,但如果它不安全,因为数据在作为查询字符串提交时对用户可见。

    虽然帖子有

    使用HttpPost提交数据的要点

    1. POST - 将要处理的数据提交到指定资源
    2. 提交按钮将始终启动 HttpPost 请求。
    3. 数据在 http 请求正文中提交。
    4. 数据在 url 中不可见。
    5. 与 GET 相比,它更安全但速度更慢。
    6. 它使用堆方法来传递表单变量
    7. 它可以发布无限的表单变量。
    8. 建议发送用户不应该看到的关键数据

    所以我希望你理解并根据需要将 ajax type:'GET' 更改为 'POST'。

    $.each() and $(selector).each()

    【讨论】:

      【解决方案4】:

      改变这一行

      url: 'Ficha/VerificarPatrocinador'
      

      到:

      url: '/Ficha/VerificarPatrocinador'
      

      因为当你使用这个url"Ficha/VerificarPatrocinador"时,它会从url:current url + Ficha/VerificarPatrocinador调用API,所以它不是正确的url。

      【讨论】:

      • 我更改了,但它调用了正确的 URL。控制器运行良好。该参数甚至通过,但我无法在我的视图中返回此结果。
      • 您需要在ajax调用时在服务器代码中创建断点,并在此ajax完成时在浏览器调试中创建断点并回调success函数。你会看到问题。
      猜你喜欢
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多