Javascript AJAX不同步
我这里有一个类似于这个问题的问题: 我有一个AJAX调用,在完成表单时更新数据库中的字段。但是,呼叫似乎没有到达控制器。当我发出警报时,它就起作用了。由于这个问题,我目前已经将其设置为同步,但即使如此,在没有警报的情况下,它也只会每5或6次到达控制器1次。这是AJAX位:Javascript AJAX不同步,javascript,ajax,asp.net-mvc-2,Javascript,Ajax,Asp.net Mvc 2,我这里有一个类似于这个问题的问题: 我有一个AJAX调用,在完成表单时更新数据库中的字段。但是,呼叫似乎没有到达控制器。当我发出警报时,它就起作用了。由于这个问题,我目前已经将其设置为同步,但即使如此,在没有警报的情况下,它也只会每5或6次到达控制器1次。这是AJAX位: function finalize() { if (!confirm("Are you sure?")) return; $("#finalizebutton").attr('disable
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发出了警报,它给了我来自控件的响应,而控件从未实际处理它。。。
如果您有任何想法,我们将不胜感激。,因为您告诉它是同步的 您的问题在于这一行:
request.open("GET", url, false);
open方法接受3个参数。方法,url,第三个是一个布尔值,告诉它请求是否应该是异步的
只需将false更改为true,请求将是异步的
request.open("GET", url, true);
但您也可以用这一行替换整个XHR代码块
$.get('/Operation/Finalize/');
你为什么不使用jQuery的AJAX?@Daniel为什么你觉得一切都需要使用jQuery?因为他已经包括了jQuery。@Daniel哈哈。我完全错过了。我的错。@tylermwashburn:这可能有点过分了,但jquery确实让生活变得更轻松了,因为它隐藏了各种愚蠢的跨浏览器问题,否则你必须自己处理(可能也会把事情搞砸)。谢谢!它起作用了!我发誓我试过了,也得到了同样的结果。但是,从概念上讲,我不确定我是否明白为什么这不是另一回事。如果是异步的,javascript将在调用进行时继续执行,从而完成函数。但是,当它是同步的时,它不应该等待响应后再继续吗?在某些情况下,我在没有控制器执行相应代码的情况下收到了正确的响应。当它是同步的,在调用send方法之后,它会在执行更多代码之前等待响应。这是我认为它应该做的,但它似乎没有这样做。即使使用asynch=false,它也会在发送之后禁用禁用行中指示的所有元素。因为它已完成加载所需的任何内容。