ajax怎么读 ajax怎么读音英语
Ajax读取asp输出的列表问题
setTimeout(function () {xmlHttp.open("GET","getTopComments.asp",true);
ajax怎么读 ajax怎么读音英语
ajax怎么读 ajax怎么读音英语
下面添加
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-encoded; charset=gb2312");
Request.send();然后
xmlHttp.send();
改成
xmlHttp.send(Null);
试试。
还是以ie为主把 毕竟火狐用的人少
不懂意思呢- - 找会电脑的人来看看吧- -
厉害
那种方法不会管用的。
一时也没有太好的办法。火狐的兼容问题一直不太好解决,我有过类似问题,我们老师说有一个解决方法,回头我帮你问问。
ajax的异步是怎么实现的
1. 怎样自定义样式?这样给你解释。
首先,我们打开一个URL地址的时候是直接在浏览器地址栏里面输入,回车后,在浏览器里面就会显示出相应的内容。也就是说,我们常规浏览器打开一个URL地址时,需要浏览器responseObj.html(data.apkInfoHtml);才行。
而Ajax是怎么一回事呢?它实际是通过JaScript里XMLHttpRequest对象来打开一个URL地址,然后读URL地址相应回来的内容,换句话说,我们可以用另外打开一个窗口,而通过js就能打开一个URL地址并且获得响应的信息。这些信息被JS捕获到后,就可以通过JS把它们按照一个规则组合并显示在页面上。这一个过程就叫做Ajax的异步刷新。
你要真实感受这个过程,你得用js实际作下才行。
深入浅出Ajax的内容
var responseObjId = $(this).attr('response-id');作为一名网站设计人员,您也许时常因为遇到以下情况而烦恼:用户只是移动了鼠标就要从重载数据;尽管请求的服务很简单,用户却仍然需要长时间等待的响应。无疑,Ajax技术能够帮助您减少这样的烦恼。Ajaxe的异步技术能够让您设计的网站在变得更简洁的同时具有更敏捷的用户响应。
});ajax原理是什么
Ajax的工作原理相当于在用户和之间加了—个中间层(AJAX引擎),使用户作与响应异步化。并不是所有的用户请求都提交给。像—些数据验证和数据处理等都交给Ajax引擎自己来做,,只有确定需要从读取新数据时再由Ajax引擎代为向提交请求。
Ajax是指一种创建交互式、快速页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
扩展资料:
Ajax这个术语源自描述从基于 Web 的应用到基于数据的应用。
Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。
使用 Jwhile (true) {aScript 向提出请求并处理响应而不阻塞用户核心对象XMLHttpRequest。通过这个对象,您的 JaScript 可在不重载页面的情况与 Web 交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。
Ajax 在浏览器与 Web 之间使用异步数据传输(HTTP 请求),这样就可使网页从请求少量的信息,而不是整个页面。
Ajax可使因特网应用程序更小、更快,更友好。
Ajax 是一种于 Web 软件的浏览器技术。Ajax 基于下列 Web 标准:
JaScript、XML、HTML与 CSS 在 Ajax 中使用的 Web 标准已被良好定义,并被所有的主流浏览器支持。Ajax 应用程序于浏览器和平台。
Web 应用程序较桌面应用程序有诸多优势;它们能够涉及广大的用户,它们更易安装及维护,也更易开layer.alert('未知错误,请稍后再试!');发。
不过,因特网应用程序并不像传统的桌面应用程序那样完善且友好。通过 Ajax,因特网应用程序可以变得更完善,更友好。
参考资料:百度百科-ajax(Ajax 开发)
AJAX怎么实现异步刷新和局部刷新
这次给大家带来AJAX怎么实现异步刷新和局部刷新,AJAX实现异步刷新和局部刷新的注意事项有哪些,下面就是实战案例,一起来看一下。
详解:
1. XMLHttpRequest 负责与端的通讯,其内部有很多重要的属性:readyStatus=4,status=200等等。当XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据的设定询问(类似于客户端会轮询的返回状态,仍然是短连接,并非长连接的端push)请求状态,如果一切已经就绪(status=200),那么就执行需要的作。
作一般就是直接作DOM,所以AJAX能做到所谓的“无刷新”用户体验。
document.getElementById("user1").innerHTML = "数据正在加载...";
if (xml.status == 200) {
document.write(xml.responseText);
提供一个回调JaScript函数,一旦响应可用,该函数就被执行
业务函数:
function castVote(rank) {
var = "/ajax-demo/static-article-ranking.html";
var callback = processAjaxResponse;
executeXhr(callback, );
}需要异步通讯的函数:
function executeXhr(callback, ) {
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = callback;
req.open("GET", , true);
req.send()(null);
} // branch for IE/Windows ActiveX version
else if (window.ActiveXOif(data.status == 1){bject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = callback;
req.open("GET", , true);
req.send()();
}req.onreadystatechange = callback
req.open("GET", , true)行定义了JaScript回调函数,一旦响应就绪它就自动执行,而req.open()方法中所指定的“true”标志说明想要异步执行该请求。
一旦处理完XmlHttpRequest并返回给浏览器,使用req.onreadystatechange指派所设置的回调方法将被自动调用。
回调函数:
function processAjaxResponse() {
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
document.getElementById("user1").innerHTML = req.responseText;
} else {
alert("There was a problem retrieving the XML data:
" + req.statusText);
}相信看了本文案例你已经掌握了方法,更Overriew: onReadyStateChange被回调函数赋值,则能实现异步调用,回调函数直接作DOM,则能实现局部刷新。那么XMLHttpRequest的onReadyStateChange如何知道服务ready了呢?状态如何change了呢(观察者模式)?则是通过客户端对服务的状态询问(定期轮询)所实现的。多精彩请关注Gxl网其它相关文章!
阅读:
laypage分页插件+ajax怎样做出异步分页
JS+ajax实现php异步提交表单
AJAX,JSP有谁能完整的解释一下具体意思吗?
$('#local-upload-real-file').trigger('click');AJAX阿贾克斯,呵呵,中文应该是这么写的吧,是一种前台页面技术,我想你见过那种页面无需刷新就会更新出新内容的留言本吧,那个就$('#version-identifier').val(data.version);是使用的阿贾克斯技术。至于说JSP,是一种动态页面,就像ASP、PHP等等这些页面的,个人理解就是可以传值的动态页面。因为HTML页面是不可以含有form表单的东西的。
asp中如何用ajax实现读取access数据库,不用刷新就可以显示数据库中的内容?求实例!万分感谢!
}}alert弹窗不一致;把web.config中的connStr 贴出来看看,应该是这错了。
看了一下,是相对路径的问题,有三种办法:
1。 把"data/lovefeifei.mdb"改成:
"~/data/lovefeifei.mdb"(这个好像只有ASP.NET 2.0支持);
2。 或者只能用“/”路径,然后一步一步往下找了。
3。 或者直接用路径,D:xxxss.mdb
哥们,你要求的是推技术!
不刷新,怎么可能实时获得数据,你把ajax理解错了!
你想不刷新就想得到数据目前不太现实(你可以看一下推技术能实现),不过还有个简单一点的办法可以实现你的想法,用jascript做个定时器,定时无刷新请一下,看看有没有新数据,有新数据就显示出来!
使用ajax定时获得数据刷新页面就行了
关于generator异步编程的理解以及如何动手写
generator出现之前,想要实现对异步队列中任务的流程控制,大概有这么一下几种方式:
回调函数
发布/
promise对象
种方式想必大家是最常见的,其代码组织方式如下:
请点击输入描述
function fn(, callback){ var Request;//创建XHR
Request = window.XMLHttpRequest ? new XMLHttpRequest() :
window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : undefined;
Request.onreadystatechange = function(){ if(Request.readystate === 4 && Request.status === 200){//状态判断 callback.call(Request.responseXML);
}};
Request.open("GET", );
}fn("text.xml", function(){//调用函数
console.log(this); //此语句后输出});
console.log("this will run before the above callback.");//此语句先输出
请点击输入描述
对于一个普通的ajax异步请求来说,我么在请求开始的时候就要告诉他请求成功之后所要执行的动作,因此就可以类似以这种方式组织代码,控制异步流程。这种调用方式的问题就是回调黑洞的问题,一层回调也还好,但涉及到二层、三层、n层的时候就让代码变得复杂很难维护。
第二种方式自己在前段时间使用backbone.js作为技术栈的项目的开发中深有体会,对于每一个ajax请求都对其分配一个自定义,在ajax成功返回数据的时候,就会触发自定义的完成接下来的动作,控制异步流程,代码如下:
请点击输入描述
请点击输入描述
第三种方式和第二种的方式性质上有些类似,如果从发布的角度来看,on方法相当于者/观察者,trigger方法相当于发布者。原理上来说无非就是维护一个“消息中心”的数组,通过on方法的都会推入“消息中心”数组,发布的时候将会匹配“消息中心”数组的,进而执行相应的流程。
我们通过jquery的sub/pub插件完成一个很简单的演示。
首先,f2向"信号中心"j});Query"done"信号。
请点击输入描述
jQuery.subscribe("done", f2);
// f1的任务代码
jQuery.publish("done");
}}2. 那么在AJAX客户端如何做到的异步呢?实际上就是Jascript的回调函数起的作用, 1000);
}f1();
请点击输入描述
jQuery.publish("done")的意思是,f1执行完成后,向"信号中心"jQuery发布"done"信号,从而引发f2的执行。
第四种方式promise范式,先看一段代码:
请点击输入描述
我们只要并且仅需要new一个promise对象,就会发现promise对象的参数函数已经执行了,隔两秒之后输出"执行完成"。
接下来再看一段其实际应用的场景代码:
请点击输入描述
从本质上来看,Promise是一个构造函数,其本身有all、reject、resolve等方法,同时其原型上有then、catch等方法。通过其用Promise new出来的对象自然就有then、catch方法。然后可以通过then方法中的回调函数,获取到上一段异步作中返回(通过resolve)的数据。从而实现对异步作的流程控制。
但我的每个函数都得被promise对象包装一下,同时一大堆的then...真是一个听蛋疼的事儿...
综上所述对于异步流程的控制,都有其自身的缺陷,我们最理想的方式便是像作同步流程那样实现对异步流程的控制,试想一下这样的异步作流程(加了层层包装,proxy便是发送一个异步请求,接下来的代码便是获取到异步作返回的数据,细节可暂时忽略):
请点击输入描述
这感觉就是的舒服,怎么实现这么一个让人很爽的东西呢,于是我们的主角---伟大的Generator函数登场了。
先理解这么自己悟的一句话:
"jascript是单线程的,顺序执行一段代码,执行到了异步作,按正常的逻辑走的话就是主队列中的代码继续执行,这时异步队列中的代码还未执行,我们继续执行的代码也就会发生报错。那么解决问题的关键就是,我们能够手动控制代码的向下执行,配合一个东西到异步作的已经正常返回了之后,去手动的作代码的执行流程,这样的话就实现了已同步的方式控制异步代码的执行"
那么问题变成了解决两个问题。
1、我们是如何实现对于异步作是否成功返回的。
2、如何手动作代码的向下执行。
对于个问题,我们采用的方案是使用promise对象的方式,Promise 的编程思想便是,用于“当xx数据准备完毕,then执行xx动作”这样的场景,用在这里再适合不过。
对于第二个问题,我们便是采用伟大的generator生成器函数,其中的yield特性,可以使我们手动的控制代码的向下执行。
接下来我们实际的解决一个问题:实现对于读取文件异步作的控制,当读取完文件之后打印读取的内容。
我们依赖于node环境,首先通过promise对其进行封装,实现数据成功的。我们手下代码如下:
请点击输入描述
var fs = require('fs');var readFile = function(fileName) { return new Promise(function(resolve,reject) {
fs.readFile(fileName, function(err, data) { if (err) return reject(err);
resolve(data);
})
})
}请点击输入描述
有了这个东西,我们便可以通过其then()表达式,"当数据加载完后,执行某个动作"。那我们执行的动作是啥,自然就是执行下一步的代码的作。继续看代码:
请点击输入描述
var gen = function () { var f1 = yield readFile('/Users/dongzhiqiang/Desktop/demo.txt'); var f2 = yield readFile('/Users/dongzhiqiang/Desktop/demo.txt');
console.log('<<<<<<<<<<<<<<<<<<<<<<<',f1.toString());
console.log('>>>>>>>>>>>>>>>>>>>>>>>>',f2.toString());
}请点击输入描述
这个就是一个generator函数的表达式,在这个函数里面,遇到generator就会执行类似于return的作。我们通过next()便可以实现手动的控制代码的向下执行。
那么我们如何控制代码的执行流程呢,看下面一段:
请点击输入描述
var g = gen();
g.next().value.then(function(data){
g.next(data).value.then(function(data){
g.next(data);
请点击输入描述
这段的具体解释就是,我们通过promise封装的对象实现了对于异步作数据返回的,当数据返回的时候,我们就通过next()执行下一步的作,同时把上步作的值带入到下一个阶段的执行流程之中。
但是上面这段作很是蛋疼啊,我们要的是一个能通用的作流程函数。那么我们继续对这段循环作进行封装:
请点击输入描述
function run(gen){ var g = gen(); function next(data){ var result = g.next(data); if (result.done) return result.value;
result.value.then(function(data){
next(data);
}next();
}run(gen);
请点击输入描述
于是一个非常简单的co模块便诞生了。
最终代码如下:
请点击输入描述
我们把函数放到run的执行器里面,便实现了同步作异步代码的过程。
种方式想必大家是最常见的,其代码组织方式如下:
function fn(, callback){
var Request;//创建XHR
Request = window.XMLHttpRequest ? new XMLHttpRequest() :
window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : undefined;
Request.onreadystatechange = function(){
if(Request.readystate === 4 && Request.status === 200){//状态判断
callback.call(Request.responseXML);
}};
Request.open("GET", );
}fn("text.xml", function(){//调用函数
console.log(this); //此语句后输出
console.log("this will run before the above callback.");//此语句先输出
对于一个普通的ajax异步请求来说,我么在请求开始的时候就要告诉他请求成功之后所要执行的动作,因此就可以类似以这种方式组织代码,控制异步流程。这种调用方式的问题就是回调黑洞的问题,一层回调也还好,但涉及到二层、三层、n层的时候就让代码变得复杂很难维护。
第二种方式自己在前段时间使用backbone.js作为技术栈的项目的开发中深有体会,对于每一个ajax请求都对其分配一个自定义,在ajax成功返回数据的时候,就会触发自定义的完成接下来的动作,控制异步流程,代码如下:
第三种方式和第二种的方式性质上有些类似,如果从发布的角度来看,on方法相当于者/观察者,trigger方法相当于发布者。原理上来说无非就是维护一个“消息中心”的数组,通过on方法的都会推入“消息中心”数组,发布的时候将会匹配“消息中心”数组的,进而执行相应的流程。
我们通过jquery的sub/pub插件完成一个很简单的演示。
首先,f2向"信号中心"jQuery"done"信号。
jQuery.subscribe("done", f2);
// f1的任务代码
jQuery.publish("done");
}, 1000);
}f1();
jQuery.publish("done")的意思是,f1执行完成后,向"信号中心"jQuery发布"done"信号,从而引发f2的执行。
第四种方式promise范式,先看一段代码:
我们只要并且仅需要new一个promise对象,就会发现promise对象的参数函数已经执行了,隔两秒之后输出"执行完成"。
接下来再看一段其实际应用的场景代码:
从本质上来看,Promise是一个构造函数,其本身有all、reject、resolve等方法,同时其原型上有then、catch等方法。通过其用Promise new出来的对象自然就有then、catch方法。然后可以通过then方法中的回调函数,获取到上一段异步作中返回(通过resolve)的数据。从而实现对异步作的流程控制。
但我的每个函数都得被promise对象包装一下,同时一大堆的then...真是一个听蛋疼的事儿...
综上所述对于异步流程的控制,都有其自身的缺陷,我们最理想的方式便是像作同步流程那样实现对异步流程的控制,试想一下这样的异步作流程(加了层层包装,proxy便是发送一个异步请求,接下来的代码便是获取到异步作返回的数据,细节可暂时忽略):
这感觉就是的舒服,怎么实现这么一个让人很爽的东西呢,于是我们的主角---伟大的Generator函数登场了。
一直以来,“异步”编程问题一直困扰着广大的 JaScript 开发者。近年来出现了各种异步解决方案,从基于最原始的callback方式的async函数,到promise标准,再到基于generator的co库,以及即将纳入 ES7 标准的async function / await语法,但是由于各种现实的原因,它们的表现并不尽人意。
原始的callback方式简单明了,不需要过多的依赖,但是在异步逻辑较复杂的场景下写出来的程序并不太直观,就我个人的使用经验而言,尽管多年来已经练就了一身可以穿梭在各种嵌套回调的“乱码”之中,每次重新看这些代码都头疼不已。
JaScript 异步解决方案都是朝着更直观(跟写同步代码一样)的方向发展的,比如近来呼声的async function / await语法,直接从语言层面解决问题,使用体验那是好得没法说的。但是,这是一个 ES7 (ES2017,即明年才会发布的 ES 标准)标准的语法,目前并没有得到各 JaScript 引擎的内置支持。虽然我们照样可以使用 Babel 神器来将它编译成 ES5 / ES6 的语法,然后运行在现有的 JaScript 引擎之上。然而使用 Babel 编译后的代码并不易于维护,首先这些代码修改后要先经过一次编译,当我们在生产环境上执行编译后的代码时,很难准确地定位到源码出错的位置。另外,根据可靠的消息,Node v7 版本会在语法层面上支持async function / await语法,但该版本原于 9 月 30 号发布却跳票了,而且按照往年的惯例,也要在 1 年后发布的 Node v8 LTS 版本上才会正式支持该语法,这对于追求稳定的企业来说还需要一个漫长的等待过程。
Generator 是 ES6 提供的一个新的数据类型,可以叫做 Generator 函数,但跟普通函数又有些不同。
其特点就是可以交出函数的执行权(即暂停执行)
定义时在 function 后面有一个
可以使用关键字 yield 进行多次返回
调用后并不立即执行,而是返回一个指向内部状态的指针对象,该对象是一个遍历器(Iterator)对象
调用返回遍历器对象的 next 方法,会移动内部指针,使得指针指向下一个状态。会返回一个对象,表示当前阶段的信息。其中 value 属性是 yield 语句后面表达式的值,表示当前阶段的值;done 属性表示 Generator 函数是否执行完毕,即是否还有下一个阶段
返回遍历器对象有个 throw 方法可以抛出错误,抛出的错误可以被函数体内的 try/catch 代码块捕获
生成器(generator)是 Python 中一种特殊的迭代器,可以通过函数生成。与常规函数不同的是,生成器函数在执行时可以中断,并在下一次调用时恢复执行状态。这种能力使得生成器可以用来实现异步编程。
异步编程是一种编程模式,其核心思想是将耗时的作分离出来,不阻塞主线程的执行,提高程序的并发性能。在 Python 中,可以使用 asyncio 模块来实现异步编程。
在异步编程中,生成器通常用于实现协程(coroutine),协程是一种轻量级的线程,它的执行由程序员控制,可以随时暂停和恢复,而不需要由作系统进行调度。
下面是一个简单的生成器示例,实现了一个简单的协程功能:
import asyncio
async def coro():
print("coroutine started")
await asyncio.sleep(1)
print("coroutine resumed")
await asyncio.sleep(2)
print("coroutine ended")
async def main():
print("main started")
task = asyncio.create_task(coro())
await task
print("main ended")
asyncio.run(main())
在这个示例中,coro 函数是一个异步生成器,使用 async def 声明。函数中使用 await 关键字来暂停执行,等待异步作完成后再恢复执行。
main 函数也是一个异步函数,使用 async def 声明。在 main 函数中,我们使用 asyncio.create_task 函数来创建一个协程任务,并使用 await 等待任务执行完成。,调用 asyncio.run 函数来运行整个程序。
这个示例中的异步生成器 coro 中使用了 asyncio.sleep 函数来模拟耗时作,实际应用中可以使用 asyncio 提供的其他异步作,例如网络请求等。
代码
function fn(, callback){
var Request;//创建XHR
Request = window.XMLHttpRequest ? new XMLHttpRequest() :
window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : undefined;
Request.onreadystatechange = function(){
if(Request.readystate === 4 && Request.status === 200){//状态判断
callback.call(Request.responseXML);
}};
Request.open("GET", );
}fn("text.xml", function(){//调用函数
console.log(this); //此语句后输出
console.log("this will run before the above callback.");//此语句先输出
代码
数控压铸机,它的编程,压铸机一停看一下加料箱,压铸机一停看一下加料箱,反反复复,当压铸机合模压不出拉头时,看一下加料箱料少,加料电熔一分钟,然后压铸机合模,就可以实现数控压铸机,只有这个公式是最准确的
反反复复反反复复反反复复反反复复反反复复反反复复反反复复
近年来出现了各种异步解决方案,从基于最原始的callback方式的async函数,到promise标准,再到基于generator的co库,以及即将纳入 ES7 标准的async function / await语法,但是由于各种现实的原因,它们的表现并不尽人意
ajax+html实现文件上传有哪几种方法
这次给大家带来ajax+html实现文件上传有哪几种方法,ajax+html实现文件的注意事项有哪些,下面就是实战案例,一起来看一下。
引语:大家都知道,html中上传文件就一个input,type=file就搞定了。但是,这个标签的样式,实在不值得提点什么,要改动他的样式,恐怕也是较难的。但是其实挺简单,今天就来说说上传文件小技巧吧!
1)、只管按照自己喜欢看到的样式去定义即可,如,可以是背景效果,可以是文字指示,总之想怎么改怎么改!有了按钮,还需要一个文件名容器,用来存放选择上传文件时的名字,从而不让上传看起来枯涩难懂。
2)、添加真正需要上传的文件控件,并设置属性display:none;如 , 这样就有了真正的上传文件的地方了。所以,可以说,上传文件的界面有多漂亮取决你的想象力!
2. 怎样触发?
这是个重点,触发的点应该是自己写的样式处,而真正起作用的元素却是隐藏的,但是并不影响它的点击效果,只需要给它触发一个点击即可,如$('#target-file').trigger('click');
3. 多选文件?
多文件上传,只需使用html的一个file的multiple=true即可,当然你也可以选择第三方的上传控件,如swfupload,效果是真心不错的,但是对于不想用的插件的人,就不起作用了。
4. 相关插件?
界面美化其实可以使用jqueryui等插件;
要做一些友好的交互的话,都会用到ajax技术,无刷新切换、异步上传、提交,,其实ajax的路径也是可以保留的,使用pushState, replaceState 实现 pjax .
表单验证:validform.js
异步提交文件: jquery.form.js
友好的弹窗提示:layer.js
5. 一点兼容性的问题?
做界面方面的工作,最怕的也是很重要的工作,就是各个浏览器之间的兼容性问题,下面主要列几点供参考:
table宽度的处理方式不一致;
select, input显示高度不一致;
...
6. 演示代码
$(function(){
var alertTitle = '系统提示:';
$('#taskForm').Validform({
btnSubmit: submitId,
tiptype: 1,
ignoreHidden: true,
dragonfly: false,
tipSweep: true,
label: ".label",
showAllError: false,
tonce: true,
ajaxPost: true,
datatype:{
},
beforeCheck:function(curform){
},
beforeSubmit:function(curform){
$('.upload-file-real').attr('disabled', 'disabled');
$(submitId).attr('disabled', 'disabled'); //提交前禁用按钮
ajaxSubmitForm(curform);
return false;
},
submitForm: function(){} //不再起作用
//切换上传方法
$('.switch-upload-mod').off().on('click', function(){
// $(submitId).attr('disabled', 'disabled');
var pObj = $(this).parent().find('.switch-upload-mod');
var index = pObj.index(this);
var uploadTypeId = $('#upload-type-id').val(); //上传方式:1:打包工具;2:本地上传,0:没有上传方式
var uploadType = $(this).attr('up-type-id');
if(parseInt($('#sub-channel-count').html()) > 0){
if(uploadTypeId != uploadType){
layer.alert('还有子渠道包数据,不能完成切换,请先确认清除再切换!');
return false;
pObj.not(':eq(' + index + ')').removeClass('btn-er').addClass('btn-default');
pObj.eq(index).removeClass('btn-default').addClass('btn-er');
if(uploadType == 36){ //local-upload
$('#upload-type-id').val(uploadType);
$('#init-apk-container').show();
$('#apk-tool-container').hide();
$('#upload-main-control').find('.del-it-main').css({display: 'inline-block'});
}else if(uploadType == 35){ //apk-tool
$('#upload-type-id').val(uploadType);
$('#init-function f1(){apk-container').hide();
$('#local-upload-container').hide();
$('#upload-main-control').find('.del-it-main').hide();
$('#apk-tool-container').show();
}});
//本地上传
$('#local-upload-real-file').off().on('change', function(){
if(!$(this).val()){
return false;
}file_size = 0;
filepath = $(this).val();
maxFileSize = 30 1024 10$('.apk-tool-upload-button').on('click', function(){24;
var browserCfg = {};
var ua = window.nigator.userAgent;
if (ua.indexOf("MSIE") >=1 ){
browserCfg.ie = true;
}else if(ua.indexOf("Firefox") >=1 ){
browserCfg.firefox = true;
}else if(ua.indexOf("Chrome") >=1 ){
browserCfg.chrome = true;
}if (browserCfg.ie) {
var img = new Image();
img.src = filepath;
file_size = img.fileSize;
if (img.fileSize > 0) {
if (img.fileSize > maxFileSize) {
alert("上传包超过30MB限制,请使用打包工具上传!");
return false;
}break;
} else {
file_size = this.files[0].size;
if (file_size > maxFileSize) {
alert("上传包超过30MB限制,请使用打包工具上传!");
return false;
var responseObj = $('#' + responseObjId);
$('#taskForm').ajaxSubmit({
:'/aa/bb/uploadTmpApk',
resetForm: false,
dataType: 'json',
beforeSubmit: function(option){
window.loading = layer.load(2);
},
success: function(data, statusText){
layer.close(window.loading);
responseObj.show();
var delObj = $('#upload-main-control').find('.del-it-main');
delObj.css({'display': 'inline-block'});
$('#sub-channel-count').html(data.apkTotal);
$('#init-apk-container').hide();
$(submitId).removeAttr('disabled');
}else{
layer.alert(data., {title: alertTitle});
}},
error: function(data){
layer.close(window.loading);
}});
return false;//防止dialog 自动关闭
//打包工具
$('#apk-tool-real-file').off().on('change', function(){
if(!$(this).val()){
return false;
}var responseObjId = $(this).attr('response-id');
var responseObj = $('#' + responseObjId);
$('#Form').ajaxSubmit({
:'/aa/bb/uploadTmpApkTool',
resetForm: false,
dataType: 'json',
beforeSubmit: function(option){
window.loading = layer.load(2);
},
success: function(data, statusText){
layer.close(window.loading);
responseObj.html(data.Html);
var parentContainer = responseObj.parent().parent(),
nameContainer = parentContainer.find('.apk-name-container'),
delObj = parentContainer.find('.del-it-apk-tool');
nameContainer.html(data.apkName);
nameContainer.attr('title', data.apkName);
$('#apk-tool-file-tmp').html(data.fileInfo);
$(submitId).removeAttr('disabled');
}else{
layer.alert(data., {title: alertTitle});
}},
error: function(data){
layer.close(window.loading);
}});
return false;//防止dialog 自动关闭
$('#apk-tool-real-file').trigger('click');
以上,主要就是,使用隐藏的input file标签选择,选择文件之后立即ajax提交,,整个表单ajax提交的过程。
合理使用一些css, js, 让你的网页更自由!
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
阅读:
ajax怎样提交form表单与实现文件上传
Ajax向后台传输json格式数据出现错误应如何处理
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。