GVKun编程网logo

Ajax无刷新Url提交页面(ajax实现无刷新)

6

对于想了解Ajax无刷新Url提交页面的读者,本文将提供新的信息,我们将详细介绍ajax实现无刷新,并且为您提供关于ajax和html5无刷新改变页面URL、ajax技术什么是Ajax无刷新技术?、a

对于想了解Ajax无刷新Url提交页面的读者,本文将提供新的信息,我们将详细介绍ajax实现无刷新,并且为您提供关于ajax和html5无刷新改变页面URL、ajax技术 什么是Ajax无刷新技术?、ajax无刷新 信息自动提示、Ajax无刷新上传的有价值信息。

本文目录一览:

Ajax无刷新Url提交页面(ajax实现无刷新)

Ajax无刷新Url提交页面(ajax实现无刷新)

尤其是在Jquery,porotype,Ext等框架流行之后,大量简化的代码可说是为程序员带来了福音,
从繁重的代码工作之中解脱出来,轻易的就可以实现过去书写复杂的功能。
不过有利有弊,到如今,习惯了使用各种框架,而很少自己书写内部源码的程序员们,还有几个记得Ajax那其实并不算复杂的基本代码呢?
今天,为了不遗忘当初的热忱,我把这基础的代码再贴出来,给自己回顾一下。

1。对于Ajax来说,判断浏览器的类别是一个重复而且毫无新意的工作,这段代码完全可以封装起来,随意调用。
复制代码 代码如下:

function xmlhttp()
{
var A=null
try
{
A=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
A=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(oc)
{
if(typeof XMLHttpRequest!="Undefined")
{
A=new XMLHttpRequest();
}
}
}
return A;
}

不解释了,反正就算不懂,直接复制过去用也是没有问题的。

2。接下来是提交Url的代码。
整个过程其实大同小异,大部分代码其实都可以封装起来,只要将参数传入,再获取结果就可以了。

复制代码 代码如下:

function Ajax(url)
{
var XmlHttp=new xmlhttp();
try
{
XmlHttp.open("POST",url,true);
   var result=SendUrl();
}
catch(e)
{
alert(e);
}
}


3.
复制代码 代码如下:

function SendUrl()
{
XmlHttp.send();
XmlHttp.onreadystatechange=function()
{
if(XmlHttp.readyState==4 && XmlHttp.status==200)
{
var result=XmlHttp.responseText;
return result;
}
}
}
您可能感兴趣的文章:

ajax和html5无刷新改变页面URL

ajax和html5无刷新改变页面URL

表现

如果你使用chrome或者firefox等浏览器访问本博客、github.com、plus.google.com等网站时,细心的你会发现页面之间的点击是通过ajax异步请求的,同时页面的url发生了了改变。并且能够很好的支持浏览器前进和后退。

是什么有这么强大的功能呢?

HTML5里引用了新的API,history.pushState和history.replaceState,就是通过这个接口做到无刷新改变页面URL的。

与传统的AJAX的区别

传统的ajax有如下的问题:

1、可以无刷新改变页面内容,但无法改变页面URL

立即学习“前端免费学习笔记(深入)”;

2、为了更好的可访问性,内容发生改变后,通常改变URL的hash

3、hash的方式不能很好的处理浏览器的前进、后退等问题

4、进而浏览器引入了onhashchange的接口,不支持的浏览器只能定时去判断hash是否改变

5、但这种方式对搜索引擎很不友好

6、twitter和google约定了使用#!xxx(即hash第一个字符为!),搜索引擎进行支持。

为了解决传统ajax带来的问题,HTML5里引入了新的API,即:history.pushState, history.replaceState

可以通过pushState和replaceState接口操作浏览器历史,并且改变当前页面的URL。

pushState是将指定的URL添加到浏览器历史里,replaceState是将指定的URL替换当前的URL。

如何使用

var state = {
    title: title,
    url: options.url,
    otherkey: othervalue
};
window.history.pushState(state, document.title, url);
登录后复制

state对象除了要title和url之外,你也可以添加其他的数据,比如:还想将一些发送ajax的配置给保存起来。

replaceState和pushState是相似的,这里就不多介绍了。

如何响应浏览器的前进、后退操作

window对象上提供了onpopstate事件,上面传递的state对象会成为event的子对象,这样就可以拿到存储的title和URL了。

window.addEventListener('popstate', function(e){
    if (history.state){
        var state = e.state;
        //do something(state.url, state.title);
    }
}, false);
登录后复制

这样就可以结合ajax和pushState完美的进行无刷新浏览了。

一些限制

1、传递的URL必须是同域下的,无法跨域

2、state对象虽然可以存储很多自定义的属性,但对于不可序列化的对象则不能存储,如:DOM对象。

对应后端的一些处理

这种模式下除了当前使用ajax可以无刷新浏览外,还要保证直接请求改变的URL后也可以正常浏览,所以后端要对这些处理下。

1、对使用pushState的ajax发送一个特殊的头,如: setRequestHeader(‘PJAX’, ‘true’)。

2、后端获取到有PJAX=true的header时,将页面中通用的部分都不输出。比如:PHP可以通过下面的判断

function is_pjax(){
    return array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'] === 'true';
}
登录后复制

虽然接口上只有pushState、replaceState、onpopstate,但在使用的时候需要做很多的处理。

针对这个已经写好了一个基于jquery的插件,已经将ajax+history.pushState封装成pjax, 项目地址: https://github.com/welefen/pjax, 目前支持jquery, qwrap, kissy 3个版本

此外,如果想要考虑到HTML4和HTML5下都能有次效果,可以参考history.js,项目地址为:https://github.com/browserstate/history.js。

参考资料:

1、Introducing the HTML5 History API

2、Manipulating the browser history

3、Session history and navigation

ajax技术 什么是Ajax无刷新技术?

ajax技术 什么是Ajax无刷新技术?

浏览器实例化一个ajax对象,这个对象发送一个http请求,并且携带一定的参数,传输到后台。后台服务器接收这些参数,同时过滤一下传过来的参数,做出逻辑判断。如果需要数据库操作参与,就要取出数据,格式化数据。返回给前台客户端,前台获取的数据,对数据进行处理,获取dom元素,将数据放到局部。从而实现无数新技术。一般用到的地方主要是注册模块邮箱和用户验证。

以上就介绍了ajax技术 什么是Ajax无刷新技术?,包括了ajax技术方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

ajax无刷新 信息自动提示

ajax无刷新 信息自动提示

在网站中有个站内信功能!怎样通过 使用 ajax技术 实现 无刷新信息自动提示功能呢!

Ajax无刷新上传

Ajax无刷新上传

html如下:

<form>
	<div id="whiteListDiv"https://www.jb51.cc/tag/dis/" target="_blank">display: none;margin:-5px auto 10px auto;">
		<label><font></font></label>
		<input type="file" id="whiteList" name="whiteList"/>
		<input type="button"onclick="uploadList('white');" value="上传">
	</div>
			
				
	<div>
		<label><font></font>是否有黑名单</label>
		<input type="file" id="blackList" name="blackList"/>
		<input type="button"onclick="uploadList('black');" value="上传">
	</div>
</form>

注意id和name属性

调用的JS方法:

function uploadList(type){
    	
    	var fileList;
    	if(type == "white"){
    		fileList = $("#whiteList").val();
    	} else {
    		fileList = $("#blackList").val();
    	}
    	
    	if(fileList == null || fileList == ""){
    		alert("请先选择文件再上传");
    		return;
    	}
    	
    	var suffix = fileList.substring(fileList.lastIndexOf("."));
    	if(suffix != ".csv" && suffix != ".CSV"){
    		alert("请选择csv格式文件");
        	return;
    	}
    	
    	var formData = new FormData($("form")[0]);
    	formData.append("idBombBannerInfo",sid);
    	formData.append("type",type);
    	
    	$.ajax({
    		url : '../../accessManagerment/uploadFileList.do',type : 'POST',data : formData,// 告诉jQuery不要去处理发送的数据
        	processData : false,// 告诉jQuery不要去设置Content-Type请求头
        	contentType : false,beforeSend:function(){
	        	//console.log("正在进行,请稍候");
        			},success : function(data) {
		        		if(data.errorMsg != null && data.errorMsg != ""){
	        				alert(data.errorMsg);
	        			} else {
	        				alert(data.resultMsg);
	        			}
        			},error : function(responseStr) { 
        				alert("上传名单出现异常");
        			} 
    	});
    	
    }

由于是ajax发起请求,界面不用刷新

后台获取参数

@RequestMapping("/accessManagerment/uploadFileList.do")
	public void uploadFileList(HttpServletRequest request,HttpServletResponse response,@RequestParam(value="whiteList",required=false) multipartfile whiteList,@RequestParam(value="blackList",required=false) multipartfile blackList,@RequestParam(value="idBombBannerInfo",required=false) String idBombBannerInfo,@RequestParam(value="type",required=false) String type
								) throws IOException,ParseException,CmsBusinessException,IllegalStateException,servletexception{
		CmsLogger.audit("弾屏广告-上传白名单/黑名单:[type=" + type+"][idBombBannerInfo="+"]");
		Map<String,Object> resultMap  = new HashMap<String,Object>();
		Map<String,Object> paramMap  = new HashMap<String,Object>();
		PrintWriter out = initWriter();
		out = response.getWriter();
		String result = "";
		
		if(!(idBombBannerInfo != null && !idBombBannerInfo.equals("") && type != null && !type.equals(""))){
			result = "{\"errorMsg\": \"上传参数不能为空\"}";
			return;
		}
		
		//获取产品编码
//		DefaultMultipartHttpServletRequest req = (DefaultMultipartHttpServletRequest) request;
//		String productCode = req.getParameter("productCode");
		long www = whiteList.getSize();
		long bbb = blackList.getSize();
		
		multipartfile fileList = null;
		if(type != null && type.equals("white")){
			fileList = whiteList;
		} else {
			fileList = blackList;
		}
		try{
			if(fileList == null){
				result = "{\"errorMsg\": \"上传文件不能为空\"}";
				return;
			}
			
			//判断上传文件的格式(csv)
			String originalName = fileList.getoriginalFilename();
			String suffix = originalName.substring(originalName.lastIndexOf("."));
			if(!suffix.equalsIgnoreCase(".csv")){
				result = "{\"errorMsg\": \"只能上传csv格式的文件\"}";
				return;
			}
			
			//获取文件内容
			InputStream is = fileList.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(is));
//			String phonestr = "";
//			String tmp = "";
//			int count = 0;		//代表上传的手机号数量
//			while((tmp = reader.readLine()) != null){
//				//仅截取每行的前11位--如果长度够11
//				if(tmp != null && tmp.length() >= 11){
//					//最多传递500个手机号
//					if(count < 500){
//						phonestr += tmp.substring(0,11) + ",";
//						count++;
//					} else {
//						result = "{\"errorMsg\": \"白名单上传失败 :白名单数量已超过500\"}";
//						return;
//					}
//				}
//			}
//			
//			if(count == 0){
//				result = "{\"errorMsg\": \"上传的白名单为空,请录入白名单重新上传!\"}";
//				return;
//			}
//			
//			if(phonestr.indexOf(",") > -1){
//				phonestr = phonestr.substring(0,phonestr.length() - 1);
//			}
			
			//下面调用接口直接将手机号一并发送过去
//			String URL = "http://IQSZ-L1470:9091/elis_mili_shop_app/do/app/product/factory/batchSaveUserWhiteList";
			String urlSuffix = cachePropertiesUtils.getPropertyValue("mili_shop.http.app.url");
			String URL = urlSuffix + "/do/app/product/factory/batchSaveUserWhiteList";
			
			NameValuePair[] data = {
//					new NameValuePair("whilteList",phonestr),//					new NameValuePair("operator",user.getUserUmNo())
					};
			//调用接口
			resultMap.put("resultCode","00");
			
			if(resultMap != null && resultMap.get("resultCode").equals("00")){
				//mili-shop新增成功
				/*注意添加产品的时候,也要同时添加产品配置信息*/
				result = "{\"resultMsg\": \"上传成功\"}";
				if(type.equals("white")){
					paramMap.put("isuploadWhitelist","Y");
				} else {
					paramMap.put("isuploadBlacklist","Y");
				}
				paramMap.put("sid",idBombBannerInfo);
				
				accessManagermentService.updateBombBannerStatus(paramMap);
				
			} else {
				result = "{\"errorMsg\": \"上传失败 " + resultMap.get("resultMsg") + "\"}";
				CmsLogger.audit("弾屏广告名单上传失败");
			}
			
		} catch(Exception e){
			result = "{\"errorMsg\": \"弾屏广告名单上传失败\"}";
			CmsLogger.error("BombBannerManagementController-->uploadFileList:弾屏广告名单上传失败:" + e.getMessage(),e);
		} finally {
			if (null != out) {
				out.print(result);
				out.flush();
				out.close();
			}
		}
	}

jquery引用正常,请求能正常到后台,应该就可以直接使用了,上传代码是直接可运行的。。。

今天关于Ajax无刷新Url提交页面ajax实现无刷新的分享就到这里,希望大家有所收获,若想了解更多关于ajax和html5无刷新改变页面URL、ajax技术 什么是Ajax无刷新技术?、ajax无刷新 信息自动提示、Ajax无刷新上传等相关知识,可以在本站进行查询。

本文标签:

上一篇java实现日历功能(java实现简单的日历功能)

下一篇java实现日历窗口小程序(java实现日历窗口小程序怎么用)