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()
はトリガーされません...クロスドメインではなく同じドメインであるためですか?
御時間ありがとうございます。