日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

百度的一个Ajax跨域方法 JavaScript是没有域的限制

發布時間:2025/5/22 javascript 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百度的一个Ajax跨域方法 JavaScript是没有域的限制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

baidu的通行證處理都是在二級域名passport.baidu.com中處理的,但是baidu很多地方登錄都好像是用ajax處理的,他是怎么做的呢?研究了一下,發現一個小技巧。

在http://zhidao.baidu.com/ 未登錄用戶回答問題時會用iframe調用http://zhidao.baidu.com/userlogin.html,userlogin.html 有下面的 javascript:

?

<SCRIPT LANGUAGE="JavaScript"> document.domain="baidu.com"; <!-- function G(id){if(typeof(id)=="string"){return document.getElementById(id);}return id;} function showInfo(obj){if(obj.checked == true){G("memInfo").style.display="block";}else{G("memInfo").style.display="none";} } function request(id,url){oScript = document.getElementById(id);var head = document.getElementsByTagName("head").item(0);if (oScript) {head.removeChild(oScript);}oScript = document.createElement("script");oScript.setAttribute("src", url);oScript.setAttribute("id",id);oScript.setAttribute("type","text/javascript");oScript.setAttribute("language","javascript");head.appendChild(oScript);return oScript; } var loginTimer=null; var loginState=-1; var tryTime=0; function PSP_ik(isOk){if(isOk==0){G("errorInfo").style.display="none";loginState=1;if(parent.loginSuccess){parent.Pop.hide();parent.loginSuccess();}}else{loginFalse();} } function loginFalse(){loginState=0;var err=G("errorInfo");err.innerHTML="用戶名或密碼錯誤,請重新登錄";err.style.display="block";G("username").focus();tryTime++;if(tryTime>1){onLoginFailed();} } function onLoginFailed(){if(parent.onLoginFailed){parent.Pop.hide();parent.loginFailed();}else{document.login.u.value=escape("http://zhidao.baidu.com/q"+parent.location.search);doucment.login.submit();}} function loginTimeout(){if(loginState==-1){var err=G("errorInfo");err.innerHTML="操作超時,請重新登錄";err.style.display="block";G("username").focus();} } function userLogin(){var username=G('username').value;var password=G('password').value;var memPassport=G('memPassport').checked?"on":"off";if(username.length<=0||password.length<=0){G("username").focus();return false;}var url = 'https://passport.baidu.com/?logt&tpl=ik&t=0&keyname=ik&mem_pass='+memPassport+'&username='+username + '&loginpass=' +escape(password)+ '&s=' + (new Date()).getTime();loginState=-1;var login=request("loginScript",url);loginTimer = setTimeout(loginTimeout, 5000); } window.onload=function(){document.loginForm.username.focus(); document.getElementById("username").focus(); } //--> </SCRIPT>

?

我們可以看到request方法處理異步請求使用動態往head中添加script而不是用xmlhttp發送get請求。妙就妙在這。我們知道調用javascript是沒有域的限制的。當加載完成時一樣會執行。

當然請求參數只能通過拼url的方式了。url通過服務器處理后直接輸出loginFalse()或者PSP_ik();非常優雅的解決了跨域的問題。

這讓我們想到了用iframe當ajax上傳文件一樣異曲同工。如果不需要服務器反饋,google的點擊計數用new img().src=...;

當然baidu這段腳本中還有一些小的技巧也值得我們學習。

相關文章:

AJAX 跨域請求 - JSONP獲取JSON數據

jsonp是什么以及jsonp的使用

?

?

轉載于:https://www.cnblogs.com/kt520/p/3658318.html

總結

以上是生活随笔為你收集整理的百度的一个Ajax跨域方法 JavaScript是没有域的限制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。