【问题标题】:asp.net MVC responding to jQuery AJAX requestasp.net MVC 响应 jQuery AJAX 请求
【发布时间】:2014-04-25 04:30:47
【问题描述】:

我在 razor .cshtml 文件中有以下代码。单击一个按钮应该会触发一个 ajax GET 请求,该请求应该会弹出一个警报,其中包含服务器返回的任何数据。 (下面的JS在document.ready中)

    $("#ajax-form").click(function () {

        alert("event fired");

        $.ajax({
            url: '/apartments/getData',
            type: 'GET',
            dataType: "text",
            success: function (data) {
                alert(data);
            },
            error: function (data) {
                alert("Error");
            }
        });
    });

以及查看代码:

<div class="row">
    <form id="ajax-form">
        <input type="submit"/>
    </form>
</div>

这是控制器代码:

    [HttpGet]
    public string getData()
    {
        return "Some dummy data here";
    }

事件确实在触发,但请求失败(错误函数触发)。我也无法让它与 $.post 或 $.get 一起使用。同时输入 localhost:54637/apartments/getData 会打开一个页面,其中显示“这里有一些虚拟数据”。

有什么想法吗?是否有某种特殊的方式必须设置 asp.net MVC 路由才能响应 AJAX 请求?

【问题讨论】:

  • 也请发表你的看法

标签: jquery asp.net ajax


【解决方案1】:

你可以使用表单submit事件,当表单提交时会发送ajax请求:

$(document).ready(function(){  

$("#ajax-form").submit(function () {

        alert("event fired");

        $.ajax({
            url: '@Url.Action("getData","apartments")',
            type: 'GET',
            dataType: "html",
            success: function (data) {
                alert(data);
            },
            error: function (data) {
                alert("Error");
            }
        });
    });
});

或者你可以像这样使用提交按钮click事件:

$(document).ready(function(){  

$('#ajax-form input[type="submit"]').click(function () {

        alert("event fired");

        $.ajax({
            url: '@Url.Action("getData","apartments")',
            type: 'GET',
            dataType: "html",
            success: function (data) {
                alert(data);
            },
            error: function (data) {
                alert("Error");
            }
        });
    });
});

更新:

您可以通过这种方式通过 ajax 发布表单:

$(document).ready(function(){  

    $("#ajax-form").submit(function (e) {
     var form = $(this);
            alert("event fired");

            $.ajax( {
      type: "POST",
      url: form .attr('action'),
      data: form.serialize(),
      success: function( response ) {
        console.log( response );
      }
    } );

       e.preventDefault(); //STOP default action
       e.unbind(); //unbind. to stop multiple form submit.
        });
});

【讨论】:

  • 仍然不起作用...尝试了提交和点击事件。事件触发对话框弹出,因此事件连接正确!只是不知道为什么请求失败......
  • 就像我说的那样,路由肯定是有效的,因为在 url 窗口中输入:localhost:54637/Apartments/Index 会返回数据!
  • 是的,它会在 alert("error") 触发后重新加载
  • 如果你想在通过ajax在服务器发布表单上处理表单数据后发送ajax调用,因为当表单发布页面重新加载并且clinet脚本将不会完全执行
  • 我刚刚将 &lt;form&gt; 更改为 &lt;button&gt; 并且它可以工作......该死。我现在明白你的意思了。那么通过ajax从&lt;form&gt;提交数据的正确方法是什么?您介意用示例更新您的答案吗?
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 2010-11-18
  • 2011-08-23
  • 2011-01-21
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多