客戶端JS:
1 var xhrurl = 'http://localhost:8001/Ajax/ticketNotify.ashx?cu=kefu1'; 2 $.ajax({ 3 type : "get", 4 async : false, 5 url :xhrurl, 6 cache : false, 7 dataType : "jsonp", 8 jsonp: "callbackparam", 9 jsonpCallback:"jsonpCallback1", 10 success : function(json){ 11 alert(json[0].name); 12 }, 13 error:function(e){ 14 alert("error"); 15 } 16 });
服務端代碼:
1 String callbackFunName = context.Request["callbackparam"]; 2 context.Response.Write(callbackFunName + "([ { \"name\":\"John\"}])");
PS:客戶端的jsonp參數是用來通過url傳參,傳遞jsonpCallback參數的參數名,比較拗口,通俗點講:
jsonp: "callbackparam"
jsonpCallback:"jsonpCallback1"
這兩個參數最終會拼接在請求的url后面,變成 http://www.xxx.com/ajax/xxx.ashx?callbackparam=jsonCallback1
服務端要獲取這個參數值:"jsonCallback1" ,拼接在要輸出的JSON數據最前面,不然就算請求成功你也只會看到警告:
Resource interpreted as Script but transferred with MIME type text/plain:
卻看不到success定義的函數執行。
順帶一提:
在chrome瀏覽器里,還可以在服務端設置header信息
context.Response.AddHeader("Access-Control-Allow-Origin", "*");
來達到跨域請求的目的,並且不需要設置ajax以下參數
dataType : "jsonp", jsonp: "callbackparam", jsonpCallback:"jsonpCallback1"
以正常ajax請求方式就可以獲得數據。