我在这里遇到了类似这个问题的问题: Javascript and AJAX, only works when using alert()
我在完成表单时有一个AJAX调用来更新数据库中的字段。但是,呼叫似乎没有到达控制器。当我发出警报时,它有效。我现在已经将它设置为同步因为这个问题,但即使这样,没有警报,它每隔5或6次只到达控制器大约1。这是AJAX位:
function finalize() {
if (!confirm("Are you sure?"))
return;
$("#finalizebutton").attr('disabled', 'disabled');
var request = new XMLHttpRequest();
var url = "/Operation/Finalize/";
request.open("GET", url, false);
request.send();
$("#otherformstuff").attr('disabled', 'disabled'); //a few disable calls
}
在控制方面我大概有:
public ActionResult Finalize()
{
db.setfinalized(true); //breakpoint here that only gets hit about 1 in 5 tests
return Content("Finalized");
}
即使在那里有一个警报,它有时也不起作用。 奇怪的是,我给request.responseText发出警报,它给了我来自控件的响应,而没有控件实际上正在处理它... 对此有任何想法都表示赞赏。
答案 0 :(得分:1)
因为你告诉它是同步的。
你的问题在于这一行:
request.open("GET", url, false);
open方法有3个参数。方法,url和第三个是布尔值,告诉它请求是否应该是异步的。
只需将false更改为true,请求将为异步。
request.open("GET", url, true);
但你也可以用这一行替换整个XHR代码块。
$.get('/Operation/Finalize/');