不按顺序调用Web服务

时间:2014-01-15 18:00:17

标签: c# javascript web-services

我有一个看起来像

的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永远不会被分配正确的值。

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

2 个答案:

答案 0 :(得分:0)

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

我建议您阅读本文以了解正在发生的事情

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

答案 1 :(得分:0)

据我所知,在 BT.WebServices.InternalServices.Commission_CheckUnprocessed 中,有一个对您的服务的调用,此方法需要2个参数:success-callback和fail-callback。

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

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

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

详细了解您应选择异步方式herehere

的原因
相关问题