javascript - ASP.NET jQuery ajax 仅在调试浏览器时有效

标签 javascript jquery asp.net ajax

问题:
为什么通过 jQuery 对 ASP.NET API Controller 的 ajax 调用仅在我在浏览器上单步执行 javascript 时有效?

详情:
我正在使用 MS Visual Studio Express 2013 for Web 在 Win7 机器上使用 Firefox 作为浏览器进行开发。我的项目混合了 MVC 和 API Controller (在两个不同的 Controller 类中)。

我的 View 通过 jQuery 对同一项目中的 API Controller 进行 ajax POST 调用。构建项目时,没有错误。浏览器中的调试器控制台未显示任何 javascript 错误。
GET ajax 调用工作得很好。但是,POST ajax 调用似乎调用“/api/”而不是“/api/BacklogAPI”。我得到一个显示的页面:

“/”应用程序中的服务器错误。
找不到资源。
说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下 URL 并确保其拼写正确。

请求的 URL:/api/

版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.34237

如果我使用调试器逐步执行 javascript,则不会发生这种情况。我不知道为什么。

已经测试:
API Controller POST 操作上的断点验证它在正常使用期间没有被调用(尽管它应该被调用)。
在我的 ajax 调用中使用断点调试 javascript,验证 POST 调用的 url 是“/api/BacklogAPI”。这是对的。当我单步执行 javascript 的其余部分时,现在我的 API Controller 上的断点被击中了。为什么它只在我调试时这样做? 我试过重新启动项目和浏览器,没有任何变化。

代码: 这是 Controller 的代码(如果需要澄清,我可以公开业务逻辑或模型类......这是一个个人学习项目):

using System.Collections.Generic;
using System.Web.Http;
using System.Net.Http;
using System.Net;
using WebApplication1.Models.WorkOrder;
using System.Linq;
namespace WebApplication1.Controllers
{
    public class BacklogAPIController : ApiController
    {
        private WOHolder holder = WOHolder.Current;

        [HttpGet]
        public IEnumerable<WorkOrder> GetAllWO()
        {
            return holder.GetAll();
        }

        [HttpGet]
        public WorkOrder GetWO(int id)
        {
            return holder.Get(id);
        }

        [HttpPost]
        public HttpResponseMessage AddWO(WorkOrder item)
        {
            holder.Add(item);
            var response = new HttpResponseMessage(HttpStatusCode.Created);
            return response;
        }
    }
}

对于 View :

@{
    Layout = "~/Views/Shared/_BacklogBasic.cshtml";
}
@section Scripts {
    <script src="~/Scripts/jquery-2.1.1.min.js"></script>
}
@section Header {
    Backlog Tester
}
@section Body {
    <form id="formInput" action="api/" method="post" enctype="application/x-www-form-urlencoded">
        Name: <input name="name" type="text" />
        <br />SN: <input name="serialNumber" type="text" />
        <br />Model: <input name="model" type="text" />
        <br /><input type="submit" value="Submit" />
    </form>
    <div id="divOutput"></div>
    <script>
        var uri = "/api/BacklogAPI";
        ShowAll();
        function ShowAll() {
            $.ajax({
                url: uri,
                type: "GET",
                dataType: "json"
            })
            .success(function (data) {
                var items = "";
                for (var i = 0; i < data.length; i++) {
                    items += data[i].name;
                    items += "<br />";
                }
                $("#divOutput").html(items);
            });
        }
        function PostForm(postInfo) {
            $.ajax({
                url: uri,
                type: "POST",
                data: postInfo
            })
            .success(function () {
                ShowAll();
            });
        }
        $("#formInput").submit(function () {
            PostForm($("#formInput").serialize());
        });
    </script>
}

最佳答案

取消表单提交

$("#formInput").submit(function (evt) {
    evt.preventDefault();

关于javascript - ASP.NET jQuery ajax 仅在调试浏览器时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27668233/

相关文章:

javascript - 检测元素的变化并将其设置回之前的状态?

javascript - 在 jQuery 中,我可以使用 SlideDown() 作为大内容 div 的向下滚动功能吗?

javascript - 如何检测 UIWebView 中的标题何时被 AJAX 更新?

javascript - jquery sleep 未在 ajax 请求上执行

javascript - TweenMax - 如何以不同的速度对元素进行动画处理?

javascript - Ajax 发布到 CodeIgniter Controller 不起作用

javascript - jslint.com |不识别 localStorage

asp.net - VS2008 CR 报告查看器。打印和导出为 PDF 不起作用

asp.net - 如何使用aspnet用户删除用户程序删除旧的aspnet用户?

c# - 使用 LINQ 在 C# 中合并两个对象列表