当前位置: 首页 > 面试题库 >

jQuery Ajax对Web服务的调用似乎是同步的

谷森
2023-03-14
问题内容

我有两个从jquery到Web服务的ajax调用。

第一次调用(GetMessages)在javascript ()中开始一个间隔,setInterval并返回存储在会话变量中的消息的字符串数组。

第二个调用(UploadUsers)上传用户并将状态保存在要返回的会话中GetMessages。因此,UploadUsers将消息添加到Session,而GetMessages检索消息并将其显示给客户端。

问题是即使我异步调用这两个方法,也要GetMessages等到UploadUsers完成。它只是加载。

我什至在要添加的每个用户之间放置一个thread.sleep,并且我希望GetMessages返回“分别添加1/10个用户”,“添加2/10个用户”,每个返回单独的调用。

发生的事情是GetMessages直到UploadUsers完成才返回任何内容,然后立即带走所有文本。

我有很多代码,所以我不知道要放什么,但是事情就这样了:

UploadUsers.aspx

callAsynchMethod('ClientStatusHandler.asmx/GetMessages',
'', printMessages, stopPollingError);

callAsynchMethod('ClientStatusHandler.asmx/StartRetrievingLeads',
data, stopPolling, stopPollingError);

Site.js

function callAsynchMethod(url, keyValue, callBack, callBackError) {
    $.ajax({
        type: "POST",
        url: url,
        data: keyValue,
        contentType: "application/json; charset=utf-8",
        success: callBack,
        error:callBackError
    });
}

ClientStatusHandler.asmx.cs

const string key = "LUMessages";
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        [WebMethod(EnableSession = true)]
        public string[] GetMessages()
        {

            if (Session[key] != null)
            {
                string[] messages = ((IList<string>)Session[key]).ToArray();
                ((IList<string>)Session[key]).Clear();
                return messages;
            }
            return new string[] { };
        }







  [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
     [WebMethod(EnableSession = true)]
      public string[] UploadUsers()
     {
    //This function adds a user and calls SaveMessageToQueue 
//for every user.
    //I see the message being entered into the session and 
//I call Thread.Sleep(10000) 
    //between messages.
    }









     private void SaveMessageToQueue(string m)
        {

        IList<string> messageQueue = (List<string>)HttpContext.Current.
Session["LUMessages"];
        messageQueue.Add(m);
         }

问题答案:

这是因为您已启用会话,并且会话锁定了所有呼叫,直到它们返回。



 类似资料:
  • 我是web服务开发的初学者。我们正在使用Spring3用java构建RESTWeb应用程序。 我们正在使用的Web服务具有异步登录方法。我们为他们提供了一个回调监听器URL,他们的服务在其中发回响应。 因此,当我们发送登录请求时,我们会收到一个空白响应作为确认。和服务发送一个响应,其中包含侦听器URL上的实际数据。 请帮助,我应该如何设计/实现调用登录服务作为同步调用?谢谢 编辑:下面是回发消息的

  • 我正在使用的应用程序将按以下顺序使用2个REST web服务: 1) 计数记录-了解特定时间范围内的记录数。 2)获取记录——一旦我们有了记录的数量,我们就需要调用这项服务。但是这项服务有一个门槛来一次性获取10K记录。假设第一个服务在特定的时间间隔内告诉我,它有100K的记录,那么我需要以分页方式调用第二个网络服务10次,考虑到它的阈值是一次10K的。 因此,如果我将进行10次同步调用,我的应用

  • 关于是否使用RMQ / Kafka / Http等进行微服务之间通信的讨论,我有点不知所措。我希望对此有所了解。首先,我的客户端是一个移动应用程序,它进行同步调用并等待响应。 凭直觉,我不希望java服务器和Python分类器之间的内部通信是同步的,因为我希望有高吞吐量,因为我可以让数千或数百万(希望如此)客户机同时发送请求。 如何进行非阻塞请求-响应,并将请求检索到同一客户端? 客户

  • 问题内容: 我正在尝试使用两个线程将值添加到中。我想要的是,当一个线程正在添加值时,另一个线程不应干涉,因此我使用了该方法。但是看来,如果我没有在对象上显式同步,则添加操作将以不同步的方式进行。 没有显式的同步块: 我得到的输出是: 在未注释显式同步块的情况下,我在添加时停止了来自其他线程的干扰。一旦线程获得了锁,它将一直执行直到完成。 取消注释同步块后的样本输出: 那么为什么不进行同步呢? 问题

  • 问题内容: 我正在研究Node.js的模块来解决问题。我已经进行了一些测试: 我可以确定在完成对Trulu的日志调用之前永远不会调用它吗?换句话说,是否可以肯定在Trulu日志被调用之前调用所有函数和最终回调? 问题答案: 我可以确定在对async.parallel的调用完成之前永远不会调用Trulu日志调用吗? 电话本身,是的。 换句话说,是所有功能 我想是的,尽管文档没有提及。但是,我希望不会

  • 我必须使用SpringBoot2.0.5从web应用程序构建中调用远程RESTendpoint 我可以使用HttpURLConnection,但由于Spring使用RestTemplate,我检查了它是什么,发现它很快就会被弃用: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/clien