【问题标题】:Calling web service out of order无序调用 Web 服务
【发布时间】:2014-01-15 18:00:17
【问题描述】:

我有类似的 java 脚本

var message2 = "";
Commission.prototype.communityChanged = function() {
    BT.WebServices.InternalServices.Commission_CheckUnprocessed(function (data) {message2 = data; }, this.callFailed);

    if (message2 == "0") {
        alert("0");
    }
}

这调用了我的服务器端 Web 服务。很简单。

Web 服务代码看起来像

[WebMethod(EnableSession=true)]
public string Commission_CheckUnprocessed() {
    return "0";
}

问题是 javascript 代码完成,然后调用 Web 服务。乱序。所以我的 message2 永远不会被赋予正确的值。

我需要添加什么才能使其以正确的顺序运行?

【问题讨论】:

  • 写你想要在function (data) {/* Your Code */}987654323@返回web服务后执行的代码

标签: c# javascript web-services


【解决方案1】:

你的function(data)是一个回调函数,表示请求完成后会执行。如果您有 .NET 背景,您可以将其视为事件或委托。这意味着function(data) 不是按顺序执行的。

我推荐你这篇文章来了解发生了什么

http://www.impressivewebs.com/callback-functions-javascript/

【讨论】:

    【解决方案2】:

    据我了解,在 BT.WebServices.InternalServices.Commission_CheckUnprocessed 内部有一个对您的服务的调用,此方法需要 2 个参数:成功回调和失败回调。

    因此,如果 Commission_CheckUnprocessed 内的服务调用是 synchronous,那么它下面的代码将一直等到它结束。在这种情况下,您的代码是正确的,但不是用户友好的,因为您在请求期间阻止了 UI。

    如果对服务的调用是异步的,那么你应该在回调中执行任何操作,所以你的代码应该是这样的:

    Commission.prototype.communityChanged = function() {
        BT.WebServices.InternalServices.Commission_CheckUnprocessed(function (data) {
            if (data === "0") {
                alert("0");
            }
        }, this.callFailed);
    }
    

    详细了解为什么应该选择异步方式herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 2013-04-02
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      相关资源
      最近更新 更多