首页 > 语言 > 关键词  > discuz最新资讯  > 正文

DISCUZ架构:AJAX之ajax.js 函数之一

2008-10-24 18:56 · 稿源:php118.com

以下为引用的内容:
var Ajaxs = new Array();
function Ajax(recvType, statusId) {
var aj = new Object();
aj.statusId = statusId ? document.getElementById(statusId) : null;
aj.targetUrl = '';
aj.sendString = '';
aj.recvType = recvType ? recvType : 'XML';
aj.resultHandle = null;

aj.createXMLHttpRequest = function() {
var request = false;
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
if(request.overrideMimeType) {
request.overrideMimeType('text/xml');
}
} else if(window.ActiveXObject) {
var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
for(var i=0; i<versions.length; i++) {
try {
request = new ActiveXObject(versions[i]);
if(request) {
return request;
}
} catch(e) {
//alert(e.message);
}
}
}
return request;
}

aj.XMLHttpRequest = aj.createXMLHttpRequest();

这一段是想尽一切办法建立一个XMLHttpRequest对象,无论是什么浏览器都能通用了。调用的时候是一个函数Ajax,有两个传入函数recvType和statusId,recvType是ajax返回值的接受类型,有HTML和XML两种类型,Dz一般用的是XML类型;statusID这个是用来指示状态的div。

以下为引用的内容:

以下为引用的内容:
aj.processHandle = function() {
if(aj.statusId) {
aj.statusId.style.display = '';
}
if(aj.XMLHttpRequest.readyState == 1 && aj.statusId) {
aj.statusId.innerHTML = xml_http_building_link;
} else if(aj.XMLHttpRequest.readyState == 2 && aj.statusId) {
aj.statusId.innerHTML = xml_http_sending;
} else if(aj.XMLHttpRequest.readyState == 3 && aj.statusId) {
aj.statusId.innerHTML = xml_http_loading;
} else if(aj.XMLHttpRequest.readyState == 4) {
if(aj.XMLHttpRequest.status == 200) {
for(k in Ajaxs) {
if(Ajaxs[k] == aj.targetUrl) {
Ajaxs[k] = null;
}
}

if(aj.statusId) {
aj.statusId.innerHTML = xml_http_data_in_processed;
aj.statusId.style.display = 'none';
}
if(aj.recvType == 'HTML') {
aj.resultHandle(aj.XMLHttpRequest.responseText, aj);
} else if(aj.recvType == 'XML') {
aj.resultHandle(aj.XMLHttpRequest.responseXML.lastChild.firstChild.nodeValue, aj);
}
} else {
if(aj.statusId) {
aj.statusId.innerHTML = xml_http_load_failed;
}
}
}
}

Ajax实例化后的对象aj的processHandle方法,作用当然就是处理ajax请求过程的函数。
具体作用有两点:
第一点,那就是对statusId这个div进行ajax请求过程全程提示,在这段代码的前三分之一的样子就是做这个用的。
注意在register.htm中有对过程的定义,以下的代码引用自./templates/default/register.htm

以下为引用的内容:
var profile_seccode_invalid = '{lang register_profile_seccode_invalid}';
var profile_secanswer_invalid = '{lang register_profile_secqaa_invalid}';
var profile_username_toolong = '{lang register_profile_username_toolong}';
var profile_username_tooshort = '{lang register_profile_profile_username_tooshort}';
var profile_username_illegal = '{lang register_profile_username_illegal}';
var profile_passwd_illegal = '{lang register_profile_passwd_illegal}';
var profile_passwd_notmatch = '{lang register_profile_passwd_notmatch}';
var profile_email_illegal = '{lang register_profile_email_illegal}';
var profile_email_invalid = '{lang register_profile_email_invalid}';
var profile_email_censor = '{lang register_profile_email_censor}';
var profile_email_msn = '{lang register_profile_email_msn}';
var doublee = parseInt('$doublee');
var lastseccode = lastsecanswer = lastusername = lastpassword = lastemail = '';
var xml_http_building_link = '{lang xml_http_building_link}';
var xml_http_sending = '{lang xml_http_sending}';
var xml_http_loading = '{lang xml_http_loading}';
var xml_http_load_failed = '{lang xml_http_load_failed}';
var xml_http_data_in_processed = '{lang xml_http_data_in_processed}';

这个便是statusId具体中要提示的文字了,之所以要这样写当然是为了方便多语言。

第二点是最重要的,当XMLHttpRequest.status=200的时候,那么就表示请求成功并返回了东西,这个时候就用resultHandle这个函数对返回的东西进行处理,可以看到还是分为HTML和XML两种情况分别调用不同的方法,一个是responsText一个是responseXML。

以下为引用的内容:
aj.get = function(targetUrl, resultHandle) {
if(in_array(targetUrl, Ajaxs)) {
return false;
} else {
arraypush(Ajaxs, targetUrl);
}
aj.targetUrl = targetUrl;
aj.XMLHttpRequest.onreadystatechange = aj.processHandle;
aj.resultHandle = resultHandle;
if(window.XMLHttpRequest) {
aj.XMLHttpRequest.open('GET', aj.targetUrl);
aj.XMLHttpRequest.send(null);
} else {
aj.XMLHttpRequest.open("GET", targetUrl, true);
aj.XMLHttpRequest.send();
}
}

aj.post = function(targetUrl, sendString, resultHandle) {
if(in_array(targetUrl, Ajaxs)) {
return false;
} else {
arraypush(Ajaxs, targetUrl);
}
aj.targetUrl = targetUrl;
aj.sendString = sendString;
aj.XMLHttpRequest.onreadystatechange = aj.processHandle;
aj.resultHandle = resultHandle;
aj.XMLHttpRequest.open('POST', targetUrl);
aj.XMLHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
aj.XMLHttpRequest.send(aj.sendString);
}
return aj;
}

举报

  • 相关推荐
  • 清华芯片新突破登Science,获评“存算一体领域重大进展”!基于类脑架构实现片上快速AI学习

    清华最新芯片成果,登上Science!全球首颗全系统集成、支持高效片上学习的忆阻器存算一体芯片,正式问世。它集合了记忆、计算和学习能力。Science编辑表示,基于忆阻器的芯片技术近期受到非常大的关注,它有望克服冯诺依曼架构造成的算力瓶颈。

  • 海信电视U8携手Discovery探索频道影像创作,共同见证冠军画质

    9月26日,海信电视正式举办秋季新品发布会,不仅亮相了全新的“Hi冠军ULEDXMiniLED”产品阵容,更携手全球最大的纪录片制作方Discovery探索频道,现场展开了一场关于极致影像的专业测评与分享。作为发布会彩蛋,Discovery探索频道摄影师平凡特邀来到现场,以专业视角揭秘双方共创影像佳作的背后故事,带领用户从浮光掠影的深水世界中,领略极致还原真实的冠军画质表现。在无数次对未知领域的探索和突破下,有理由相信,新一代ULEDX技术平台产品还将为高端电视体验开拓更多新的可能。

  • Discovery探索频道摄影师:海信电视U8赋能影像创作极致表现

    9月26日,海信电视秋季新品发布会拉开大幕,“Hi冠军ULEDXMiniLED全新阵容”重磅亮相,现场除了最令人期待的U8系列新品,Discovery探索频道摄影师也亮相现场,分享了其与海信电视U8共同完成的影像创作故事。“海信电视U8可以完全满足水下极端环境影像创作的超高需求,可以给人一种五彩斑斓的黑。全新的U8KL,必将重塑行业对好画质的新定义,成为用户选择高端电视的新参考。

  • NVIDIA下一代GPU架构巨变!首次上马多芯片 学习AMD/Intel

    NVIDIARTX40系列、AMDRX7000系列这一代显卡都已经布局完毕下一代还要等差不多两年,至少NVIDIABlackwell在路线图上看要到2025年才会推出明年来一波Super系列?2021年就第一个曝出Blackwell这个代号的曝料高手kopite7kimi给出的最新说法称,Blackwell不会明显增加GPC、TPC等计算单元的数量,CUDA核心数自然也不会大幅提升,但是会在基础架构上做出巨大的革新。GB20x系列游戏卡核心,应该还是单芯片,这倒是和AMDNavi31/32不一样。

  • AI Score My Site:AI驱动的SEO工具

    AIScoreMySite是一款创新的工具,旨在帮助用户了解他们的网站在AI驱动的搜索引擎上的排名和可发现性,并提供相应的改进建议。在今天的数字化时代,网站的排名对于吸引流量和潜在客户至关重要。随着AI在搜索领域的广泛应用,利用SiteSpeakAI提升网站SEO将变得尤为关键。

  • SCA能力再获认可!腾讯Xcheck通过可信开源治理工具能力评估

    9月21日,中国信息通信研究院、中国通信标准化协会联合主办的2023OSCAR开源产业大会在京召开,会上发布了2023可信开源最新评估结果。腾讯Xcheck-SCA开源威胁管控平台通过了可信开源治理工具评估。依托自身实践自研的技术工具和手段,腾讯安全将持续打磨安全产品,助力开源软件可信安全,实现从源头降低安全风险,帮助行业和企业践行“安全左移”理念。

  • MSCI:海尔智家ESG获A级评价,行业最高

    在全球应对气候变化和我国提出“双碳”目标的背景下,ESG受到前所未有的关注,已经成为企业高质量发展的助推器。那么,哪些企业在ESG领域的实践值得认可与学习呢?不妨看看国际指数机构的ESG评级。 近日,国际指数机构摩根士丹利资本国际公司(中文简称“明晟”,英文简称“MSCI”)公布了最 新ESG评级结果。其中,海尔智家升至A级,不仅是国内行业评级最 高,也实现了

  • AI分析器scalene帮你解决Python慢的问题

    Python作为一种易于学习和应用的编程语言,因其丰富的库和广泛的用途,在数据科学和机器学习领域变得非常流行。它也因其相对较慢的运行速度备受诟病。通过使用Scalene,Python程序员可以更好地利用这个强大的编程语言,不再为性能问题烦恼。

  • Galenic法国科兰黎携独家专利成果,亮相第33届IFSCC国际化妆品科学大会

    2023年9月4日至9月7日,被誉为“化妆品诺贝尔”的第33届IFSCC国际化妆品科学大会在西班牙巴塞罗那隆重举行。Galenic法国科兰黎因其独家专利雪藻胜肽1的研究成果,受邀亮相IFSCC大会,并入选IFSCC科研创新论文奖,成为“IFSCC荣誉金牌战略合作伙伴”,其皮肤学级研发的硬核实力荣膺认证。Galenic法国科兰黎将延续品牌的研发精神,以严谨科学的态度持续推动科学护肤行业的迭代发展,迎接皮肤学级科研的专业新高峰。

  • 修复视频新神器BSCV工具集 为视频修复技术开辟新可能

    在过去十年中,视频修复技术取得了显著进展,但对于常见问题如直播视频的修复效果不尽理想。为了更好地应对这些问题,研究人员开发了BSCV数据集,一个专为解决视频修复问题设计的全新工具和视频集合。该论文为视频恢复领域提供了一个重要的数据集和新的方法,有助于研究人员更好地理解和解决比特流损坏视频恢复的挑战。