对此我完全陌生,我正在尝试学习如何使用Ajax从JS进行API调用。
我使用MVC启动了ASP.NET Core Web应用程序。
我用一个提交按钮在Index.cshtml中创建了一个HTML表单(我以后会在想使用一些剃刀功能!)
<form id="login_form">
<input id="submit_button" type="submit" value="Submit" onclick="GeneralPost()"/>
</form>
我注意到的是,当我从Visual Studio启动调试模式(服务器运行)后,第一次单击“提交”按钮会返回错误。但是,单击此后的按钮将返回成功!
这是我放在site.js文件夹中的Ajax
function GeneralPost() {
var data = "Data To Pass";
$.ajax({
type: "POST",
url: '/Home/Login',
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert(response.name);
},
error: function () {
alert("Error");
}
});
}
这是我的控制器
public class HomeController : Controller
{
// What I wrote
[HttpPost()]
public User Login([FromBody]string data)
{
User user = new User(); ;
user.name = $"User {data}";
user.id = "1";
return user;
}
// the rest is already there from the MVC example by visual studio (deleted some code to make it shorter)
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
我还注意到,当我单击剃刀页面上的“提交”按钮时,将执行Index()操作。我不确定为什么在我请求登录操作时始终执行索引操作! MVC有什么用吗?这与我第一个中止要求有关吗?
我认为从Startup.cs中包含我的配置也是一个好主意,因为我不确定我是否还了解全部内容,并且我正在尝试提供尽可能多的有用信息
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
// app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
总结一下:
1-从Visual Studio启动调试会话后,第一次按下提交按钮时,出现错误,并且Fiddler向我显示会话状态已中止。
2-即使我在新标签页或新浏览器上第二次按下按钮,我也能获得预期的结果而不会出错。
有什么想法吗?感谢您的帮助
答案 0 :(得分:0)
我找到了以下问题的解决方案
AJAX request doesn't work the first time but works thereafter 我想我使用了错误的搜索关键字!
基本上,表单的类型为Submit。因此,当我按下“提交”按钮时,它将刷新页面,从而导致请求受到干扰并中止。