Jsonresult在我的Ajax调用中使用参数失败.为什么会发生这种事

Jsonresult is failing with parameter in my Ajax Call. Why is it happening?

本文关键字:为什么 失败 参数 Ajax 我的 调用 Jsonresult      更新时间:2023-09-26

这是我视图中的脚本。

    $(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}放入脚本中,并将参数放入操作中时。它不起作用。为什么会这样?控制器运行正常。参数甚至通过了,但我无法在视图中返回此结果非常感谢。

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

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

并将ajax类型属性从"GET"更改为"POST",然后使用JSON.stringify。还要仔细检查url。您的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);
                    });
                }
            });
        });
    });

希望它能帮助你

我认为@StephenMuecke可能有所收获,因为我能够通过一个新项目重现(预期的)逻辑。

首先要确定的是代码哪里出了问题:服务器还是客户端。

请尝试使用Visual Studio调试器,并在VerificarPatrocinador中放置断点。然后运行客户端代码,查看是否命中了断点。如果成功,则意味着问题出在客户端。

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

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

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

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. Submit按钮将始终启动HttpPost请求
  3. 数据在http请求正文中提交
  4. 数据在url中不可见
  5. 与GET相比,它更安全,但速度较慢
  6. 它使用堆方法传递form变量
  7. 它可以发布无限的形式变量
  8. 建议发送用户不可见的关键数据

因此,我希望您理解并更改ajax类型:如果您愿意,请将"GET"更改为"POST"。

$.each()和$(选择器).ech()

更改此行

url: 'Ficha/VerificarPatrocinador'

至:

url: '/Ficha/VerificarPatrocinador'

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