2

JSONPがどのように機能するかについての理論は理解していますが、詳細や構文についての何かが私にはわかりません。私が取り組んでいる例は「quotationrotator」です。これはJSONを使用して単一のドメインで正常に機能していましたが、別のドメインでも使用して、1つのデータソースのみを更新したいと考えています。

(補足:呼び出し元のドメインがsubdomain.mydomain.comの場合、mydomain.comからのリクエストでCORSの問題が発生するのは不思議です。サブドメインが影響を受けないようにしたいと思います!!)

次のような静的関数で埋めたJSONファイルがあります。

quotator.testimonialFetch(
{
    "testimonials": [
        {
            "quote": "Amazing product!",
            "quotedName": "Somebody",
            "quotedTitle": "Director of Yoyos",
            "company": "Kramerica",
            "products": ["product1"],
            "yearmonth": 201212,
            "active": true
        },
        {
            "quote": "Never seen anything like it.",
            "shortquote": "When quote is too long, use this.",
            "quotedName": "Fflewddur Fflam",
            "quotedTitle": "",
            "company": "Prydain",
            "products": ["product1","product2"],
            "yearmonth": 201212,
            "active": false
        }
    ]
}
);

省略形(コールバックを追加する)を使用する代わりに$.getJSON、より詳細な$.ajax()方法を使用します。

$.ajax({
   type: 'GET',
    url: 'http://www.mydomain.com/assets/testimonials.json',
    async: false,
    jsonpCallback: 'quotator.testimonialFetch',
    contentType: "application/json",
    dataType: 'jsonp',
    success: function(json) {
       console.log('success!');
       console.dir(json.testimonials);
    },
    error: function(e) {
       console.log('some sort of error!');
       console.log(e.message);
    }
});

成功はログに記録されませんが、mydomain.comまたはsub.mydomain.com内から呼び出しを行っているかどうかに関係なく、エラーはログに記録されます。エラーは、何かが「未定義」であるということです。それが何であるかわからない。

したがって、主なことは...処理ロジックをどこに配置するかわからないことです。?のコールバックに直接入る必要があり$.ajax()ますか?私は確かにパディング名に一致する関数を作成しました、そしてそれはデータオブジェクトを受け取ります:

quotator.testimonialFetch = function(data) {
// using the document ready function as a safety net; maybe I don't need to defer?
$(document).ready(function() {
        quotator.quoteobj = data.testimonials;
        console.log(quotator.quoteobj); // logs the object I'm expecting! Yay!
        };
    });
}

それが何をするのかを知ることはそれほど重要ではありません、あるいは少なくとも私はそれが重要であるとは思いません。重要なのは:

-sub.mydomain.com$.ajax()から呼び出しを行うと、ロジックが開始され、引用符が処理され、結果は一種の成功になります...呼び出しによってJSONPが返され$.ajaxますが、エラーコールバックはトリガーされた後、データはコールバック関数で正しく処理されます...?!

-mydomain.com$.ajax()から電話をかけると、必要なオブジェクトを取得できますが、処理できません。JSONP応答を確認できますが、$.ajax代わりにエラーコールバックがトリガーされるため、成功コールバック自体には処理がありません。そして、quotator.testimonialFetch()はトリガーされません...クロスドメインではなく同じドメインであるためですか?

御時間ありがとうございます。

4

1 に答える 1

1

JSONP を使用してエラー コールバックや同期 AJAX を実行することはできません。ドキュメントは、同じサーバー呼び出しの例外を作成していないようです。

于 2013-01-21T18:04:32.267 に答える