Jsonresult在我的Ajax调用中失败了参数。为什么会这样?

时间:2016-04-17 03:00:40

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

这是我的观点。         

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

4 个答案:

答案 0 :(得分: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);
                    });
                }
            });
        });
    });

希望它能帮到你

答案 1 :(得分:0)

我认为@StephenMuecke可能会有所作为,因为我能够用新项目重现(预期)逻辑。

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

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

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

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

有关详细信息,请查看http://api.jquery.com/jquery.ajax/

答案 2 :(得分:0)

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. 数据在网址中不可见。
  5. 与GET相比,它更安全但更慢。
  6. 它使用堆方法传递表单变量
  7. 它可以发布无限制的表格变量。
  8. 建议发送用户不可见的关键数据
  9. 所以我希望你理解并改变ajax类型:&#39; GET&#39;到&#39; POST&#39;如果你愿意的话。

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

答案 3 :(得分:-1)

更改此行

url: 'Ficha/VerificarPatrocinador'

为:

url: '/Ficha/VerificarPatrocinador'

因为当您使用此网址"Ficha/VerificarPatrocinador"时,它会从网址current url + Ficha/VerificarPatrocinador调用API,因此它不是正确的网址。