0

可能であれば、一度に 2 つ以上のリクエストを送信しようとしていますか? 最初のリクエストが行われた後、その情報をWebページに表示し、追加のURLごとに同じことをしたいので、速度が心配です。

私は遅延オブジェクトについて読んで、いくつかの例を試してきました。これまでのところ、これをやろうとしました。

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script >
$(document).ready(function($) {
// - 1st link in chain - var url = 'https://www.sciencebase.gov/
catalog/items?parentId=504108e5e4b07a90c5ec62d4&max=60&offset=0&format=jsonp';
// - 2nd link in chain - var url = 'https://www.sciencebase.gov/
catalog/itemLink/504216b6e4b04b508bfd333b?format=jsonp&max=10';
// - 3rd (and last) link in chain - var url = 'https://www.sciencebase.gov/
catalog/item/4f4e4b19e4b07f02db6a7f04?format=jsonp';

// parentId url
function parentId() {

//var url = 'https://www.sciencebase.gov/catalog/items?parentId=
504108e5e4b07a90c5ec62d4&max=3&offset=0&format=jsonp';

    return $.ajax({
        type: 'GET',
        url: 'https://www.sciencebase.gov/catalog/items?parentId=
        504108e5e4b07a90c5ec62d4&max=3&offset=0&format=jsonp',
        jsonpCallback: 'getSBJSON',
        contentType: "application/json",
        dataType: 'jsonp',
        success: function(json) {},
        error: function(e) {
            console.log(e.message);
        }
    });
}

// itemLink url
function itemLink() {

    //var url = 'https://www.sciencebase.gov/catalog/itemLink
    /504216b6e4b04b508bfd333b?format=jsonp&max=10';

    return $.ajax({
        type: 'GET',
        url: 'https://www.sciencebase.gov/catalog/itemLink
        /504216b6e4b04b508bfd333b?format=jsonp&max=10',
        jsonpCallback: 'getSBJSON',
        contentType: "application/json",
        dataType: 'jsonp',
        success: function(json) {},
        error: function(e) {
            console.log(e.message);
        }
    });
}

// Multiple Ajax Requests 
$.when( parentId(), itemLink()).done(function(parentId_data, itemLink_data) {
    console.log("parentId_data.items[0].title");

});

});

しかし、機能が機能しているようには見えません。関数内の .when() メソッドの後に何かを配置して、プログラムに何をすべきかを伝えることができると期待していましたが、何も表示されませんか??

助けてくれてありがとう!

4

1 に答える 1

1

問題の一部は、$.when の完了ハンドラーで、コールバックに渡される引数が、単に使用したいデータではなく、各要求の引数の配列であることです。以下の例のように.pipeを使用することで、これを回避できます。

また、非常に正当な理由がない限り、jsonpCallback を指定しないでください。ほとんどの場合、jQuery に内部的に管理させたいと考えています。

JSFiddleでテストされた実際の例を次に示します

jQuery(function($) {

    function parentId() {
        return $.ajax({
            url: 'https://www.sciencebase.gov/catalog/items?parentId=504108e5e4b07a90c5ec62d4&max=3&offset=0&format=jsonp',
            dataType: 'jsonp',
            error: function(e) {
                console.log(e.message);
            }
        // We'll use pipe here so that rather than the value being passed to our $.when handler
        // is simply our data rather than an array in the form of [ data, statusText, jqXHR ]
        }).pipe(function( data, statusText, jqXHR ) {
            return data;
        });
    }

    function itemLink() {
        return $.ajax({
            url: 'https://www.sciencebase.gov/catalog/itemLink/504216b6e4b04b508bfd333b?format=jsonp&max=10',
            dataType: 'jsonp',
            error: function(e) {
                console.log(e.message);
            }
        }).pipe(function(data) {
            return data;
        });
    }

    // Multiple Ajax Requests 
    $.when( parentId(), itemLink()).done(function(parentId_data, itemLink_data) {
        console.log( parentId_data, itemLink_data );
    });
});
于 2012-11-20T04:07:19.163 に答える