把連結換成php就沒問題。
$.ajax({type:'GET',async:false,url:"http://app.veishu.com/jsonp/categories/all.js",dataType:"jsonp",success:function(data){alert("success");// alert(data[0]);// var dataHtml=""// for(var i=0; data.length;i++){// dataHtml+="";}$(".list").html(dataHtml);},error:function(){alert("ajax is error");}});
這個ajax不會進入error,也沒有進入success。
在那個連結的js那報錯。
如果把連結換成php會成功進入success。
但這個js檔案的連結直接在瀏覽器開啟也沒有問題,可以出現json。不知怎麼回事?
還有瀏覽器開啟js檔案有unicode字元,該怎麼轉!
回複內容:
使用Jquery進行Jsonp調用,返回的json資料需要帶callback名稱,同時因為你的傳回值是待用資料,所以應該指定jsonpCallback的名稱。
jQuery(document).ready(function(){ $.ajax({ type: "get", async: false, url: "http://app.veishu.com/jsonp/categories/all.js?1.2.1", dataType: "jsonp", jsonpCallback:"flightHandler",//自訂的jsonp回呼函數名稱 success: function(data){ }, error: function(){ } }); });
返回的all.js資料格式如下:
flightHandler({"success":true,"data"[{"name":"\u624b\u5de5DIY","position":0,"slug":"handicraft"}]});
JSONP 的原理:segmentfault.com/q/1010000002608394/a-1020000002608399
靜待資源檔在增加 callback 的 GET 參數之後並沒有返回一個執行函數形式的 JS 檔案,所以載入失敗。
app.veishu.com/jsonp/categories/all.js 可否貼下all.js的代碼??
沒記錯的話,jsonp請求要求伺服器端返回的json資料被括弧()包起來。
jsonp的原理就是請求一段js, all.js有語法錯誤。
你這個app.veishu.com/jsonp/categories/all.js返回的資料結構是沒法做jsonp的,jsonp應該返回類似這種資料結構callback(data);其中data即為你要返回的json資料
【相關推薦】
1. 精選:“php程式員工具箱”V0.1版本下載
2. php免費視頻教程
3. php開發驗證碼最新視頻教程