0
<script type="text/javascript">
    var sourceData = {sites:[{ name: "London" , Id: "0"}, { name: "Bath", Id: "1"}, { name: "Cambridge", Id: "2"}]};
    $(document).ready(function () {
    $(sourceData.sites).each(function (index, data) { var objName = "<div class='bold' id = place" + data.Id + ">" + data.name + "</div>"; $('#results').append(objName); });

    $(sourceData.sites).each(function (index, data) {
    $.getJSON("GenerateData.aspx?place=" + data.name, function (retData) {
            $('#place' + data.Id)
                .wrap("<a href=GenerateData.aspx?place=" + data.name + "></a>")
                .append(retData.Wait); });
        });
    });
</script>

したがって、基本的にgenerateDataは次のようなjsonを返します。

{"name": "(place parameter passed back)", "Wait": 5000}

5000を除いて、実際にはRand(0,5000)であり、要求が返される前に実行されるthread.sleepにも対応します。

私が理解できないのは、並列化を行っている間(結果が返される順序はランダムです)、返される順序は最低から最高ではなく、合計の戻り時間は合計待機時間。

したがって、リクエストが並列に送信されているように見えても、GenerateDataに対するリクエストの実際の並列化はありません。

AsynchronousControllerがjQueryを介してASP.NETMVCで要求をブロックしているのを見てきましたが、これは私が(まだ)使用していないMVCに固有のようです。

私はjquery側から何か間違ったことをしていますか、それともこれは並列化を台無しにするASP.netセッションの別のケースですか?

javascriptコンソールでレイテンシーを見てください

4

1 に答える 1

1

$.getJSON()非同期操作であることは偶然ではありません。リクエストのレスポンスは、リクエストと同じように順序付けられることはありません。または、少なくとも順序付けられることはほとんどありません。送信した順序でリクエストを返したい場合は、Ajax キューを作成する必要があります。これにより、前のリクエストの完了時にリクエストが送信されます。を使用してこれを実現できますjQuery.queue()

于 2013-02-12T13:07:01.080 に答える