3

私は少し緑ですので、ご容赦ください。

値が返されるまでSharePointWebサービスをポーリングする必要があります。コードのフォーマットが間違っていると思います。これに対処する既存のスレッドがある場合は、それを指摘してください。私の比較的限られた理解は私がそれを認識するのを妨げたかもしれません。

function Poll2(){
    $.ajax({
        //Use an ABSOLUTE reference to your target webservice
        url: "https://mydomain.com/Sandbox/bitest/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        success:processResult,
        complete: Poll2,
        timeout: 5000,
        contentType: "text/xml; charset=\"utf-8\"",
        async: true
    });
}

私の望みは、成功するまで5秒ごとにサービスをポーリングし、成功すると「processResult」関数に進み、そこですべてのデータが処理されることです。親関数を参照して無限ループを作成したのではないかと思います。

-------------------編集と新しいコード-------------------

私はこのブログ投稿で、私が探しているものを大まかに達成する解決策を見つけました。結局のところ、私は本当にリクエストを1回だけ実行したいと思っています。ただし、「無限の」ポーリングルーチンに関しては、これは非常にうまく機能します。

(function poll() {
    setTimeout(function () {
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'http://somewhere.com/rest/123',
            success: function (data) {
                MyNamespace.myFunction(data); //DO ANY PROCESS HERE
            },
            complete: poll
        });
    }, 5000);
})();

ただし、このルーチンは、実行後5秒まで最初のポーリングを初期化しないことに注意してください。シンプルなコードですが!著者に感謝します。

4

3 に答える 3

4

上記の編集で述べたように、このブログ投稿で、探しているものをほぼ達成するソリューションを見つけました。結局のところ、私は自分のリクエストを 1 回だけ実行したいのです。ただし、「無限」のポーリング ルーチンに関しては、これでうまくいきます。

(function poll() {
    setTimeout(function () {
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'http://somewhere.com/rest/123',
            success: function (data) {
                MyNamespace.myFunction(data); //DO ANY PROCESS HERE
            },
            complete: poll
        });
    }, 5000);
})();

ただし、このルーチンは、実行後 5 秒まで最初のポーリングを初期化しないことに注意してください。シンプルなコードですが!著者に感謝します。

于 2012-08-16T13:42:27.730 に答える
1

タイムアウト設定は、あきらめる前にサーバーからの応答を待機する時間を jQuery に指示します。

function Poll2(){
    $.ajax({
        //Use an ABSOLUTE reference to your target webservice
        url: "https://example.com/Sandbox/bitest/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        success:processResult,
        timeout: 5000,
        contentType: "text/xml; charset=\"utf-8\"",
        async: true
    });
}

成功するまで 5 秒ごとに試行し続けたい場合は、次のようにすることができます。

function Poll2(){
    $.ajax({
        //Use an ABSOLUTE reference to your target webservice
        url: "https://example.com/Sandbox/bitest/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        success:processResult,
        complete: Poll2,
        timeout: 5000,
        contentType: "text/xml; charset=\"utf-8\"",
        async: true
        error: function(xhr) {
            setTimeout(Poll2, 5000);
        }
    });
}
于 2012-08-13T19:45:20.537 に答える
0

確かに、無限ループを作成したことは正しいです。

ただし、リクエストを再度行う必要があるかどうかを確認し、そうでない場合は、データを処理して (ここで必要な場合)、Poll2 関数から戻ることができます。

于 2012-08-13T19:42:43.880 に答える