關於cross domain ajax 的一些實驗
1. 用jQuery的話, 要用這樣的語法
$.ajax({
url: queryImageAPI,
dataType: 'jsonp',
data: {dm08pagenum: '70675', dm08num: '3499', callback: 'jsonpCallback'},
});
記得dataType 要設定為jsonp 否則不會正常執行 會被瀏覽器擋下來 雖然回傳狀態是200 OK 但完全沒有回應(在firebug的"網路"監測項目裡是回傳空白 在主控台處則是紅字 代表執行發生錯誤)
同時要記得的是jQuery 提供的get() method 不能用於存取跨網域的資料存取
它的dataType 只有xml, json, script, html 而已, 不支援jsonp
Note: 如果呼叫最後因為時間太長而Aborted的話, 應該是存取該URL被拒 所以得不到回應, 和跨網域的存取無關
2. 主機那端回傳的資料格式可以是字串 未必要是json 只是必須要用callback function name來將回傳的資料包起來 這樣回傳回來塞入DOM裡的時候才會去呼叫到指定的callback function
ex(以php為例):
本來回傳的部分是:
$xml = '<rows><row><width>950</width></row></rows>';
echo #xml;
現在要變成 echo $callback . "('" . $xml . "')";
假設$callback = jsonCallback 好了
那browser 端接收到的回傳就會是
jsonCallback('<rows><row><width>950</width></row></rows>')
此時便會把$xml 的整個內容送進jsonCallback 執行
那麼 不用callback function name 把回傳包起來可不可以呢?
答案是不行 經過實驗 會得到下列的error msg
XML can't be the whole program
http://ad3.fashionguide.com.tw/j/AdLoc_www.js?Rnd=387945
Line 10
意思就是說 瀏覽器端預期得到的是一段js 的程式碼 像是這樣
jsonCallback('<rows><row><width>950</width></row></rows>');
它就會自動去執行 如果得到一堆xml code 它就不知道把這段塞進script tag中要做啥
$.ajax({
url: queryImageAPI,
dataType: 'jsonp',
data: {dm08pagenum: '70675', dm08num: '3499', callback: 'jsonpCallback'},
});
記得dataType 要設定為jsonp 否則不會正常執行 會被瀏覽器擋下來 雖然回傳狀態是200 OK 但完全沒有回應(在firebug的"網路"監測項目裡是回傳空白 在主控台處則是紅字 代表執行發生錯誤)
同時要記得的是jQuery 提供的get() method 不能用於存取跨網域的資料存取
它的dataType 只有xml, json, script, html 而已, 不支援jsonp
Note: 如果呼叫最後因為時間太長而Aborted的話, 應該是存取該URL被拒 所以得不到回應, 和跨網域的存取無關
2. 主機那端回傳的資料格式可以是字串 未必要是json 只是必須要用callback function name來將回傳的資料包起來 這樣回傳回來塞入DOM裡的時候才會去呼叫到指定的callback function
ex(以php為例):
本來回傳的部分是:
$xml = '<rows><row><width>950</width></row></rows>';
echo #xml;
現在要變成 echo $callback . "('" . $xml . "')";
假設$callback = jsonCallback 好了
那browser 端接收到的回傳就會是
jsonCallback('<rows><row><width>950</width></row></rows>')
此時便會把$xml 的整個內容送進jsonCallback 執行
那麼 不用callback function name 把回傳包起來可不可以呢?
答案是不行 經過實驗 會得到下列的error msg
XML can't be the whole program
http://ad3.fashionguide.com.tw/j/AdLoc_www.js?Rnd=387945
Line 10
意思就是說 瀏覽器端預期得到的是一段js 的程式碼 像是這樣
jsonCallback('<rows><row><width>950</width></row></rows>');
它就會自動去執行 如果得到一堆xml code 它就不知道把這段塞進script tag中要做啥
留言
張貼留言