Ⅰ ajax跨域不穩定
跨域問題可以解決的
1、響應頭添加Header允許訪問
2、jsonp 只支持get請求不支持post請求
3、httpClient內部轉發
4、使用介面網關——nginx、springcloud zuul (互聯網公司常規解決方案)
望採納
Ⅱ 如何解決ajax跨域請求失敗的問題
ajax跨域失敗,是因為js遵循同源規則,即不同域名下的js訪問是不被允許的(安全考慮),那麼如何解決,主要有三個方法,第一個是修改伺服器(如果是別人的伺服器,就沒辦法了,所以這個不多說,網上會有具體的操作),說一下客戶端就能解決的2個辦法,第一個,ajax返回數據,也就是dataType類型設置為jsonp,jsonp是專門為解決跨域問題而生的,具體用法自行網路,第二個方法,我最近也在用的,親測有效,就是先用自己伺服器後台執行curl,抓取目標伺服器上的文件,在用前端ajax獲取伺服器後台獲取到的目標伺服器文件結果即可
Ⅲ AJAX跨域訪問解決方法
IE9、Chrome、FF、Opera支持ResponseHeader Access-Control-Allow-Origin
IE下得額外配置:
jQuery.support.cors = true; (啟用讀取上面那個頭信息的功能)
點擊IE瀏覽器的的「工具->Internet 選項->安全->自定義級別」將「其他」選項中的「通過域訪問數據源」選中為「啟用」或者「提示」,點擊確定就可以了。(自身的過濾)
Ⅳ 如何解決ajax跨域問題
ajax本身是不可以跨域的,
通過產生一個script標簽來實現跨域。因為script標簽的src屬性是沒有跨域的限制的。
其實設置了dataType: 'jsonp'後,$.ajax方法就和ajax XmlHttpRequest沒什麼關系了,取而代之的則是JSONP協議。JSONP是一個非官方的協議,它允許在伺服器端集成Script tags返回至客戶端,通過javascript callback的形式實現跨域訪問。
如
/*當前網址是localhost:3000*/
js代碼
$.ajax({
type:"get",
url:"http://localhost:3000/showAll",/*url寫異域的請求地址*/
dataType:"jsonp",/*加上datatype*/
jsonpCallback:"cb",/*設置一個回調函數,名字隨便取,和下面的函數里的名字相同就行*/
success:function(){
。。。
}
});
/*而在異域伺服器上,*/
app.js
app.get('/showAll',students.showAll);/*這和不跨域的寫法相同*/
/*在異域伺服器的showAll函數里,*/
vardb=require("./database");
exports.showAll=function(req,res){
/**設置響應頭允許ajax跨域訪問**/
res.setHeader("Access-Control-Allow-Origin","*");
/*星號表示所有的異域請求都可以接受,*/
res.setHeader("Access-Control-Allow-Methods","GET,POST");
varcon=db.getCon();
con.query("select*fromt_students",function(error,rows){
if(error){
console.log("資料庫出錯:"+error);
}else{
/*注意這里,返回的就是jsonP的回調函數名+數據了*/
res.send("cb("+JSON.stringify(r)+")");
}
});
}
Ⅳ ajax post跨域,是不是沒有好的解決方案
如果支持HTML5的XMLHttpRequest 的話,POST還是很好跨域的。
直接在後端,HTTP頭裡面加上
Access-Control-Allow-Origin: 允許跨域請求資源的網址;
即可。
IE9以下是不支持的, 在IE9以下瀏覽器的POST跨域很多都是靠 dom一個iframe網頁模擬表單提交來做的。
Ⅵ 如何解決ajax跨域問題,域問題
解決跨域的種類
Ⅶ 本來正常的ajax調用出現了跨域問題
做過跨越多個網站的Ajax開發的朋友都知道,如果在A網站中, 我們希望使用Ajax來獲得B網站中的特定內容, 如果A網站與B網站不在同一個域中,那麼就出現了跨域訪問問題。 Ajax的跨域訪問問題是現有的Ajax開發人員比較常遇到的問 題。 IE對於跨域訪問的處理是,彈出警告框,提醒用戶。 如果用戶將該網站納入可信任網站,或者調低安全級別, 那麼這個問題IE就不會在提醒你。 FireFox等其它非微軟的瀏覽器遇到跨域訪問, 則解決方案統一是拒絕訪問。 有人說,IE是主流瀏覽器,只要它能正常使用就好了。此言差已, IE雖然能夠處理,但是是有前提的, 要麼用戶不厭其煩地在頁面彈出警告框之後點擊是( 點擊否就不執行該Ajax調用了), 要麼用戶將該網站納入可信任站點。這兩種做法, 在企業管理系統的應用中倒是比較常見, 因為系統管理員可以以行政手段保證用戶的行為。 但是對於互聯網上的網站或者門戶開發,這種做法則不行。 最近遇到了這個問題, 需要在跨域訪問結束之後完成使主窗口出現一些特效, 搜索了一些資料, 通過不斷嘗試以及在不同瀏覽器中進行兼容性測試, 找到了幾個可行的方案: 1、Web代理的方式。 即用戶訪問A網站時所產生的對B網站的跨域訪問請求均提交到A網 站的指定頁面,由該頁面代替用戶頁面完成交互, 從而返回合適的結果。 此方案可以解決現階段所能夠想到的多數跨域訪問問題, 但要求A網站提供Web代理的支持, 因此A網站與B網站之間必須是緊密協作的,且每次交互過程, A網站的伺服器負擔增加,且無法代用戶保存session狀態。 2、on-Demand方式。MYMSN的門戶就用的這種方式, 不過MYMSN中不涉及跨域訪問問題。 動態控制script標記的生成, 通過修改script標記的src屬性完成對跨域頁面的調用。 此方案存在的缺陷是, script的src屬性完成該調用時採取的方式時get方式, 如果請求時傳遞的字元串過大時,可能會無法正常運行。 不過此方案非常適合聚合類門戶使用。 3、iframe方式。 查看過醒來在javaeye上的一篇關於跨域訪問的帖子, 他提到自己已經用iframe的方式解決了跨域訪問問題。 數據提交跟獲取,採用iframe這種方式的確可以了, 但由於父窗口與子窗口之間不能交互(跨域訪問的情況下, 這種交互被拒絕),因此無法完成對父窗口效果的影響。 4、用戶本地轉儲方式: IE本身依附於windows平台的特性為我們提供了一種基於i frame,利用內存來「繞行」的方案, 即兩個window之間可以在客戶端通過windows剪貼板的 方式進行數據傳輸, 只需要在接受數據的一方設置Interval進行輪詢, 獲得結果後清除Interval即可。 FF的平台獨立性決定了它不支持剪貼板這種方式, 而以往版本的FF中存在的插件漏洞又被fixed了, 所以FF無法通過內存來完成暗渡陳倉。 而由於文件操作FF也沒有提供支持( 無法通過Cookie跨域完成數據傳遞), 致使這種技巧性的方式只能在IE中使用。 5、我自己用於解決這類問題的方式:結合了前面幾種方式, 在訪問A網站時,先請求B網站完成數據處理, 再根據返回的標識來獲得所需的結果。這種方法的缺點也很明顯, B網站的負載增大了。優點,對session也實現了保持, 同時A網站與B網站頁面間的交互能力增強了。最重要的一點, 這種方案滿足了我的全部需要。 總結一下,以上方案中可選擇的情況下,我最推薦on- Demand方式,在不需要提交大量數據的情況下, 這種方式能夠解決您的大部分問題。 參考資料: http://www.newbooks.com. cn/info/37166.html
Ⅷ ajax跨域請求jsonp出現Uncaught SyntaxError,該如何解決
Jquery文檔中描述,jsonp:」callback」, jsonpCallback:」success_jsonpCallback」,傳遞這兩個參數是有原因的,jsonp的返回數據格式應該是: 「客戶端傳遞的回調方法名稱(json數據)」。
比如將這段代碼
<?php
$arr = array ('username'=>'jack','age'=>21,'gender'=>'male');
echo json_encode($arr);
?>
改為
<?php
$arr = array ('username'=>'jack','age'=>21,'gender'=>'male');
echo $_GET['callback']."(".json_encode($arr).")";
?>
找到兩段代碼的區別就知道怎麼解決啦。
Ⅸ Jquery AJAX跨域問題怎麼解決
用JSONP可以實現ajax跨域訪問:
jQuery.ajax({
url: 'http://192.168.1.xxx:8080/jsonp.action?arg=123',
type: 'GET',
dataType: "jsonp", // 注意dataType是jsonp
cache: false,
success: function(data){
alert(data.key); //這里就把你傳入的123顯示出來
}
});
不知道你後台用的是什麼語言,如果是JAVA,可以像這樣寫:
public void jsonp() {
String arg = this.getRequest().getParameter("arg");
this.writeResponse("({key:'" + arg + "'})");
}
Ⅹ 如何解決 Ajax 跨域請求不到的問題
解決ajax跨域問題
方法1:
在伺服器端直接設置header內容:Access-Control-Allow-Origin:*
或者
Access-Control-Allow-Origin:允許訪問的url
這樣就可以直接請求到任何網站或者允許訪問的url
php程序這樣寫:
header('Access-Control-Allow-Origin:*');
或者
header('Access-Control-Allow-Origin:允許訪問的url ');
方法2:
在Nginx設置」頭信息「直接添加Access-Control-Allow-Origin:*的信息。