ajax 可以加headers對(duì)象,例如:
成都創(chuàng)新互聯(lián)專業(yè)提供綿陽(yáng)機(jī)房托管服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購(gòu)買綿陽(yáng)機(jī)房托管服務(wù),并享受7*24小時(shí)金牌售后服務(wù)。
var?settings?=?{
type:?"GET",
url:url,
dataType:"jsonp"
error:?function(XHR,textStatus,errorThrown)?{
alert?("XHR="+XHR+"\ntextStatus="+textStatus+"\nerrorThrown="?+?errorThrown);
},
success:?function(data,textStatus)?{
$("body").append(data);
},
headers:?{
"Referer":""
}
};
$.ajax(settings);
純手打,望采納!
這樣是不行的,可以用jq的 .getScript方法。 獲取服務(wù)端的js 里面包括服務(wù)端的域名,請(qǐng)求服務(wù)端方法 服務(wù)端response.write("這里調(diào)用已經(jīng)得到的腳本中的方法 比如 alert('a')")
1.通過(guò)中間過(guò)渡層解決跨域問(wèn)題
(1)通過(guò)Web代理服務(wù)器將不同域的應(yīng)用統(tǒng)一通過(guò)代理服務(wù)器進(jìn)行隔離,所有的應(yīng)用都在一個(gè)域名下面了。(比如apache,nginx等)
(2)跨域的安全限制都是指瀏覽器端來(lái)說(shuō)的.服務(wù)器端是不存在跨域安全限制的,所以通過(guò)本機(jī)服務(wù)器端通過(guò)類似httpclient方式完成“跨域訪問(wèn)”的工作。
2.通過(guò)script標(biāo)簽解決跨域問(wèn)題
注意:凡是擁有"src"這個(gè)屬性的標(biāo)簽都擁有跨域的能力,比如script、img、iframe
示例:
前臺(tái)腳本:
Java代碼
script type="text/javascript"
var flightHandler = function(data){
alert('你查詢的航班結(jié)果是:票價(jià) ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 張。');
};
var url = ";callback=flightHandler";
var script = document.createElement('script');
script.setAttribute('src', url);
document.getElementsByTagName('head')[0].appendChild(script);
/script
后臺(tái)data.jsp內(nèi)容:
Java代碼
%@ page language="java" pageEncoding="UTF-8"%
%
String callback = request.getParameter("callback");
StringBuilder builder = new StringBuilder();
builder.append(callback).append("({").append("\"code\": \"CA1998\",").append("\"price\": 1780,").append("\"tickets\": 5").append("});");
out.println(builder.toString());
%
使用jquery的jsonp來(lái)實(shí)現(xiàn)跨域訪問(wèn),例子如下:
Java代碼
script type="text/javascript"
$(function(){
$.ajax({
type: "get",
async: false,
url: "",
dataType: "jsonp",
jsonp: "callback",
jsonpCallback:"flightHandler",
success: function(json){
alert('您查詢到航班信息:票價(jià): ' + json.price + ' 元,余票: ' + json.tickets + ' 張。');
},
error: function(){
alert('fail');
}
});
});
/script
Ajax請(qǐng)求一個(gè)目標(biāo)地址為非本域(協(xié)議、域名、端口任意一個(gè)不同)的web資源,并根據(jù)響應(yīng)獲得外部應(yīng)用數(shù)據(jù)。比如我們用Ajax訪問(wèn)城市天氣預(yù)報(bào)、IP地址等公共服務(wù)接口時(shí),就涉及跨域了。我們請(qǐng)求一個(gè)外部服務(wù)時(shí),瀏覽器會(huì)基于安全問(wèn)題拒絕授權(quán)訪問(wèn)。而script、script、iframe標(biāo)簽的src屬性就不存在跨域的問(wèn)題,所以Ajax跨域就是利用這一點(diǎn)以及js對(duì)JSON的支持,外部服務(wù)只要給Ajax的請(qǐng)求響應(yīng)一段JS代碼或JSON數(shù)據(jù),就能被Ajax獲取到。
比如jquery的getScript
$.getScript("http://pv.sohu.com/cityjson",function(){//前面加上http
//這個(gè)服務(wù)給響應(yīng)的js代碼為
//returnCitySN?=?{cid:?"110000",?cip:?"124.xxx.22.xxx",?cname:?"北京市"}
//回調(diào)函數(shù)執(zhí)行前,外部服務(wù)給響應(yīng)的js代碼已被加載到本地,所以可以直接使用。
console.log("cid?:?"?+?returnCitySN.cid);
console.log("cip?:?"?+?returnCitySN.cip);
console.log("cname?:?"?+?returnCitySN.cname);
});
不要用這個(gè)網(wǎng)站的音樂(lè)API,不提供jsonp調(diào)用
改用百度音樂(lè)的即可:
效果圖:
使用jquery的ajax的jsonp類型跨域請(qǐng)求數(shù)據(jù)、始終獲取不到返回?cái)?shù)據(jù)是設(shè)置錯(cuò)誤造成的,解決方法為:
1、創(chuàng)建基本的文件結(jié)構(gòu)json_ajax.html和json_ajax.php,下載jquery.js。
2、如圖分別編寫json_ajax.html和json_ajax.php文件的編碼。
3、分別在w(l)amp環(huán)境下運(yùn)行json_ajax.html和json_ajax.php。
4、經(jīng)過(guò)源碼和運(yùn)行結(jié)果的分析,知道了在json_ajax.html中設(shè)置了按鈕的點(diǎn)擊事件,點(diǎn)擊按鈕。
注意事項(xiàng):
jQuery的核心特性可以總結(jié)為:具有獨(dú)特的鏈?zhǔn)秸Z(yǔ)法和短小清晰的多功能接口;具有高效靈活的css選擇器,并且可對(duì)CSS選擇器進(jìn)行擴(kuò)展;擁有便捷的插件擴(kuò)展機(jī)制和豐富的插件。jQuery兼容各種主流瀏覽器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。