2010-06-18 25 views
9

Başka bir sunucudan bir web sayfasına xml okumaya çalışıyorum ve sorunumun aynı Kökenli İlke ve dolayısıyla bir çapraz etki alanı sorunu olduğunu varsayalım.xml etki alanı almak için jsonp kullanın

Biraz googling yapıyorum ve jsonp'un ileriye giden yol olduğu görünüyor. Yığınlama akışında ve başka sitelerde bulduğum bazı örneklere dayanarak, sahip olduğum şey budur ve sunucuyu xml ile "vurmaz". Bir tarayıcıda xml görüntüleyebilirim.

$(document).ready(function(){  
    $.ajax({ 
     type: 'GET', 
     dataType: 'jsonp',     
     url: 'http://192.168.0.106:8111/getconfiguration?', 
     success: function (xml) 
     { //do stuff with received xml 
     }});  

Herhangi bir öneriniz var mı? JS/JQuery ile ilgili bir acemi olduğumu lütfen unutmayın; o)

cevap

1

Uzak sunucuda XML'i oluşturan kod erişiminiz varsa, jsonp içinde her şeyi sarabilirsiniz.

JSONP, bilgileri uzaktan ayıklamak yerine, <script> etiketlerini kullanarak veri elde ederek aynı kaynak ilkesini ele geçirmenin bir yoludur. Uzaktan komut php olsaydı senin getconfiguation komut

, geri arama uzaktan çağrı Örneğin

tarafından belirtilen

callback("SERVER GENERATED XML/JSON DATA GOES HERE"); 

gibi bir şey olurdu, bunu şuna yapacak şunun gibi:

<?php 
// getconfiguration.php 
echo "$_GET['callback']($configuration_data);" 
?> 

Ardından, sorunuzda sağladığınız AJAX'ı çalıştırın. bu aslında böyle sayfanıza dinamik bir komut dosyası etiketi eklemek edilir İşlevi:

<script src="http://192.168.0.106:8111/getconfiguation.php?callback=???"></script> 

jquery doldurur ??? Sizin başarı için yaratılan bazı benzersiz sarıcı ile sizin için

+1

Erişiminiz yoksa ne olacak? Verileri sadece xml formatında gönderebilir/alabilirsiniz. – crosenblum

+1

Sunucu, etki alanı, istemciler, javascript etkileşimlerini işleyecek şekilde ayarlanmamışsa, bunu zorlayamazsınız. Sunucunuzda, flash veya java uygulamalarınızda bir proxy kullanan çeşitli iş çevreleri vardır. –

3

Eğer sunucuya erişiminiz yoksa (örneğin, bir api alıyorsanız), XML'inizi jsonp'a dönüştürmek için YQL'u kullanabilirsiniz. ve yahoo sunucusunu tarayıcıdan özel bir özel YQL url (SQL benzeri bir ifadeye gömülü) kullanarak sorgulayın. İşte bir örnek (zillow api için):

$('document').ready(function(){ 
    $.ajax({ 
    url: 'http://query.yahooapis.com/v1/public/yql?q=select * from zillow.search where address = "1835 73rd Ave NE" and citystatezip = "98039" and zwsid = "X1-ZWz1cse68iatcb_13bwv"&format=json&diagnostics=true&env=http://datatables.org/alltables.env&callback=mydata', 
    jsonpCallback: "mydata", 
    success: function(results) { 
     console.log(results.query.results.searchresults.response.results.result.zpid); 
    }, 
    dataType: 'jsonp' 
    }); 
});