Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX不同步_Javascript_Ajax_Asp.net Mvc 2 - Fatal编程技术网

Javascript 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

我这里有一个类似于这个问题的问题:

我有一个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发出了警报,它给了我来自控件的响应,而控件从未实际处理它。。。
如果您有任何想法,我们将不胜感激。

,因为您告诉它是同步的

您的问题在于这一行:

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,它也会在发送之后禁用禁用行中指示的所有元素。因为它已完成加载所需的任何内容。