環境:
1. ESRI ArcGIS Server所提供的服務。
2. 選擇回傳JSON格式。
3. 呼叫的服務與程式屬於不同網域
經過Google與實際測試後,有幾種方式可以正確取得數值。
1. 使用ajax(),dataType為html:
function getData() {
    jQuery.support.cors = true;
    $.ajax({
 type: "GET",
 dataType: "html",
 url: url,
 contentType: "application/json; charset=utf-8",
        success: showData,
        error: function (xhr, ajaxOptions, thrownError) {
          alert("err: " + thrownError);
 }
    });
}
function showData(response) {
    var obj = jQuery.parseJSON(response);
    $.each(obj, function (key, val) {
        //拆解JSON          
    });
}
說明:1. 重點在於jQuery.support.cors = true;的設定。(官方說明)
2. 該方法所返回的response必須先轉成JSON格式,再進行拆解。
2. 使用ajax(),dataType為jsonp:
function getData() {
    $.ajax({
 type: "GET",
 dataType: "jsonp",
 url: url,
        contentType: "application/json; charset=utf-8",
        success: showData,
        error: function (xhr, ajaxOptions, thrownError) {
          alert("err: " + thrownError);
 }
    });
}
function showData(response) {
    $.each(response, function (key, val) {
        //拆解JSON           
    });
}
說明:1. 將dataType設為jsonp(JSON with Padding),但是必須對方服務支援該方式。
2. 該方法所返回的response已為JSON格式。
3. 使用$.getJSON()
function getData() {
 jQuery.support.cors = true;
 $.getJSON(url,{}, showData);
}
function showData(response) {
    $.each(response, function (key, val) {
        //拆解JSON           
    });
}
說明:1. 該方法所返回的response已為JSON格式。
2. 雖然看似比較單純,但是沒有提供可以做錯誤處理地方。
---------------------------------------------------
*上述三種方式於IE8與Chrome15.0.874.121皆可正常取得回傳數值。
*如果比較深入去查可以發現圍繞著XMLHttpRequest對於跨域的說明。(參考文件)
*如果自己要利用jsonp的方式來實現跨域,"似乎"安全性要格外注意。
沒有留言:
張貼留言