Kullanmak istediğim bir yaklaşım, json'u bir nesne değişmeziyle doldurmak / sarmak ve ardından dosyayı bir .jsonp dosya uzantısıyla kaydetmek. Bu yöntem, yeni jsonp dosyasıyla (test.jsonp) çalışacağınız için orijinal json dosyanızı (test.json) değiştirmeden bırakır. Sarıcıdaki ad herhangi bir şey olabilir, ancak jsonp'yi işlemek için kullandığınız geri arama işleviyle aynı ad olması gerekir. 'Test.jsonp' dosyası için jsonp sarmalayıcı ekini göstermek için örnek olarak gönderilen test.json'unuzu kullanacağım.
json_callback({"a" : "b", "c" : "d"});
Ardından, döndürülen JSON'u tutmak için komut dosyanızda genel kapsamı olan yeniden kullanılabilir bir değişken oluşturun. Bu, döndürülen JSON verilerini komut dosyanızdaki yalnızca geri arama işlevi yerine tüm diğer işlevler için kullanılabilir hale getirir.
var myJSON;
Sonra komut dosyası enjeksiyonu ile json almak için basit bir işlev geliyor. IE, jQuery .append yöntemini desteklemediğinden, burada jQuery'yi komut dosyasını belge başlığına eklemek için kullanamayacağımızı unutmayın. Aşağıdaki kodda belirtilen jQuery yöntemi, .append yöntemini destekleyen diğer tarayıcılarda çalışır. Farkı göstermek için referans olarak dahil edilmiştir.
function getLocalJSON(json_url){
var json_script = document.createElement('script');
json_script.type = 'text/javascript';
json_script.src = json_url;
json_script.id = 'json_script';
document.getElementsByTagName('head')[0].appendChild(json_script);
// $('head')[0].append(json_script); DOES NOT WORK in IE (.append method not supported)
}
Sonraki, json sonuç verilerini genel değişkene almak için kısa ve basit bir geri arama işlevidir (jsonp sarıcı ile aynı ada sahiptir).
function json_callback(response){
myJSON = response; // Clone response JSON to myJSON object
$('#json_script').remove(); // Remove json_script from the document
}
Json verilerine artık nokta gösterimi kullanılarak komut dosyasının herhangi bir işlevi tarafından erişilebilir. Örnek olarak:
console.log(myJSON.a); // Outputs 'b' to console
console.log(myJSON.c); // Outputs 'd' to console
Bu yöntem, görmeye alışık olduğunuzdan biraz farklı olabilir, ancak birçok avantajı vardır. İlk olarak, aynı jsonp dosyası aynı işlevleri kullanarak yerel olarak veya bir sunucudan yüklenebilir. Bonus olarak, jsonp zaten alanlar arası uyumlu bir formattadır ve REST tipi API'lerle de kolayca kullanılabilir.
Kabul edilirse, hata işleme işlevleri yoktur, ancak neden bir taneye ihtiyacınız var? Bu yöntemi kullanarak json verilerini alamıyorsanız, hemen hemen json içinde bazı sorunlarınız olduğundan emin olabilirsiniz ve iyi bir JSON doğrulayıcıda kontrol ederim.
JSON
dizeyi döndürdüğünüzde , zaten bir javascript nesnesi alıyorsunuz, kullanmaya gerek yokeval()
.