用jQuery实现ajax总结以及跨域问题
本文为作者原创,未经博主允许,不可转载
ajax请求的常用的参数设置:
type:请求类型,"POST","GET",默认为get
url:发送请求的地址
data:是一个对象,联通请求发送到服务器的数据,表单数据($("#addForm").serialize())或formData(文件上传时用到)
dataType:预期服务器返回的数据类型。如果不指定,jQuery将自动根据http包MIME信息来智能判断,一般我们采用json格式,
可以设置为“json”,也可以设置为xml,(后面讲解)
success:是一个方法,请求成功后的回调函数,传入返回后的数据,以及包含成功代码的字符串
error:是一个方法,请求失败时调用此函数,传入XMLHTTPRequest对象。
什么地方会用到ajax,一般用ajax是为了页面异步刷新,在不刷新页面的情况下,异步到后台去请求数据,
并根据得到的数据做出想要的处理或操作,比如:提交form表单,进行文件上传,刷新表单数据等。
ajax请求有两种方式:即type:get或post两种,一般为post。两种的主要区别为:
GET请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给WEB服务器。当然在Ajax请求中,这种区别对用户是不可见的。
另外ajax常用的属性和方法为:
1.responseText :获得字符串形式的响应数据
2.responseXML: 获得XML形式的响应数据
3.status 和 statusText: 以数字和文本形式返回http状态码
4.getResponseHeader() : 查询响应中的某个字段的值
5.getAllResponseHeader() :获取所有的响应报头
readyState属性(监听服务器连接及响应):
0:请求为初始化,
1.服务器连接已建立, open已经调用
2.请求已接收,也就是接收到头消息了
3.请求处理中,也就是接收到响应主体了
4.请求已完成,且响应已就绪,也就是响应完成了
以下为使用的案例和跨域问题的研究
用jQuery的ajax进行form表单提交的案例为:
此处为get请求
$(document).ready(function(){
$("#submit").click(function(){
$.ajax({
type:"GET",
url:"",
dataType:"json",
success:function(data){
if(data.success){
$("#searchResult").html(data.msg);
}
else{
$("#searchResult").html("出现错误"+data.msg);
}
alert("成功"),
}
error:function(jqXHR){
alert("发生错误"+jqXHR.status);
}
})
})
})
post请求的案例为:
此处为post请求,需要加入data参数
$(document).ready(function(){
$("#submit").click(function(){
$.ajax({
type:"POST",
url:"",
data:{
name:$("#name").val(),
password:$("#password").val(),
sex:$("#sex").val(),
number:$("#number").val(),
}
dataType:"json",
success:function(data){ //data为后台返回的数据
if(data.success){
$("#searchResult").html(data.msg);
}
else{
$("#searchResult").html("出现错误"+data.msg);
}
alert("成功"),
}
error:function(jqXHR){
alert("发生错误"+jqXHR.status);
}
})
})
})
在工作应用当中,会有很多地方遇到ajax,用ajax请求返回的数据类型也会不一样,有json格式,xml格式以及formData格式等。
json格式一般返回的为一个对象,
当用json作为返回类型时,应用的案例为:
function submitDemandForm(){
$.ajax({
url:"<%=basePath%>handPlay/demandVideoSubmit",
type:"POST",
data:$("#addDemandVideoForm").serialize(),
dataType:'json',
success:function(data){
console.info(data);
// alert("提交成功"+data.returnMsg);
//调用上传的方法
uploadPic();
uploadVideo();
submitValue = data.returnMsg;
console.info(data);
},
error:function(data){
if(data.status == "false"){
// alert("提交失败");
console.info(data);
submitValue = data.returnMsg;
}
}
})
}
当用formData作为请求对象时,是进行文件上传时用到,其使用的方法为:
function uploadPic(){
var formData = new FormData();
console.info(formData);
formData.append("myfile",document.getElementById("file").files[0]);
var uploadPicValue = "";
$.ajax({
url:"${uploadCoverUrl}",
type:"POST",
data:formData,
contentType:false,
dataType:'xml',
/*
*必须false才会避开jQuery对formdata的处理
*/
processData:false,
success:function(data){
console.info(data);
//if(data.status == "true"){
alert("图片上传成功");
uploadPicValue = data.readyState;
// }
if(data.status == "true"){
//alert("data.msg");
uploadPicValue = data.readyState;
$("#uploadPicBar").removeClass("active");
}
},
error:function(data){
console.info(data);
// alert("图片上传失败");
uploadPicValue = data.readyState;
//增加上传失败时的样式
// document.getElementById("#uploadPicWord").innerHTML='上传失败';
$("#uploadPicWord").html('上传失败');
// alert("uploadPicValue"+uploadPicValue);
}
})
}
跨域问题:
当使用火狐调试时,报的异常为:
火狐浏览器错误提示: http://localhost:8080/IMP/static/images/partners/partner_bg.png [HTTP/1.1 404 Not Found 5ms]
Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead[详细了解] jquery-1.9.1.min.js:1
Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead[详细了解] jquery-migrate-1.1.0.min.js:3
Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead[详细了解] jquery.js:1
所用的 getPreventDefault() 已不赞成使用。请改用 defaultPrevented。 jquery-1.9.1.min.js:3:31293
FormData { } sendLiveForm:139:5
已拦截跨源请求:同源策略禁止读取位于 http://114.215.100.148:8060/image?prefix=abcd 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。 (未知)
FormData { } sendLiveForm:139:5
FormData { } sendLiveForm:139:5
Security wrapper denied access to property (void 0) on privileged Javascript object.
Support for exposing privileged objects to untrusted content via __exposedProps__ is being gradually removed - use WebIDL bindings or Components.utils.cloneInto instead.
Note that only the first denied property access from a given global object will be reported.
异常解析及解决方案:
跨域:
1.当协议,子域名,主域名,端口号中任意一个不相同时,都算作不同域
2.不同域之间相互请求资源,就算做“跨域”
3.JavaScript处于安全方面的考虑,不允许跨域调用其他页面的对象。什么是跨域呢,简单的理解
就是因为JavaScript同源策略的限制,a.com域名下的js无法操作b.com或是c.a.com域名下的对象
4.jsonp可用于解决主流浏览器的跨域数据访问的问题...(具体需要上网,且该方法存在较强的局限性)
5。解决跨域方法--XHR2
HTML5提供的XMLHttpRequest Level2 已经实现了跨域访问以及其他的一些新功能
IE10以下都不支持
在服务器端在一些小小的改造即可
header('Access-Control-Allow-Orign':*);
header('Access-Control-Allow-Methods:POST,GET');
用jQuery实现ajax总结以及跨域问题的更多相关文章
- [ 转 ]jquery的ajax和getJson跨域获取json数据
目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...
- jquery的ajax和getJson跨域获取json数据
目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...
- jQuery解决ajax请求的跨域问题
这两天工作中频繁的遇到JS的跨域问题,都通过绕开ajax请求的方式.特地百度了一下,把跨域问题解决了.在这分析一下 首先贴上js的页面代码: <html> <head> < ...
- jQuery发送ajax请求实现跨域访问
Java代码的话,在返回响应之前调用如下代码中的allowCrossDomainAccess()方法: /** * 允许跨域访问 */ public void allowCrossDomainAcce ...
- (转)jquery ajax使用及跨域访问解决办法
原文地址:***/UIweb/jquery_ajax_kuayujiejue.html 最近开发中,设计到智能手机项目,给领导做几个demo.主要是用jquery和jqeury mobile. 越来越 ...
- 06: AJAX全套 & jsonp跨域AJAX
目录: 1.1 AJAX介绍 1.2 jQuery AJAX(第一种) 1.3 原生ajax(第二种) 1.4 iframe“伪”AJAX(第三种) 1.5 jsonp跨域请求 1.6 在tornad ...
- 巧妙利用JQuery和Servlet来实现跨域请求
在网上看到很多的JQuery跨域请求的文章,比较有意思.这里我发表一个Servlet与JQuery配置实现跨域的代码,供大家参考.不足之处请指教 原理:JavaScript的Ajax不可以跨域,但是可 ...
- JQuery和Servlet来实现跨域请求
在网上看到很多的JQuery跨域请求的文章,比较有意思.这里我发表一个Servlet与JQuery配置实现跨域的代码,供大家参考.不足之处请指教 原理:JavaScript的Ajax不可以跨域,但是可 ...
- ajax请求ashx跨域问题解决办法
ajax请求ashx跨域问题解决办法 https://blog.csdn.net/windowsliusheng/article/details/51583566 翻译windowsliusheng ...
随机推荐
- 快捷键(SourceInsight)
选择一块 : Ctrl+-选择一行 : Shift+F6到下一个函数 : 小键盘 +上一个函数 : 小键盘 -高亮当前单词 : Shift+F8回退.前进 alt + , alt + .最后一个窗口 ...
- 廖威雄: 思维导图:利用__attribute__((section()))构建初始化函数表与Linux内核init的实现
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/juS3Ve/article/details/79049404 本文具体解说了利用__attribut ...
- iOS10网络权限数据
参考地址:1.http://www.cocoachina.com/ios/20180723/24274.html https://blog.csdn.net/wang_bo_justone/art ...
- MySQL数据库参数
数据库参数 MYSQL数据库的参数配置一般在my.ini配置文件中修改/添加(部分参数也可以用set global 参数名=值 做临时调整,重启后失效),配置完后需要重启数据库才生效. 参数1:inn ...
- React Native开发之IDE(Atom+Nuclide)安装,运行,调试
版权声明:本文为博主原创文章,如需转载请注明出处 目录(?)[-] 前言 MacWindowsLinux 准备工作 安装Atom 安装Nuclide 新建一个工程 自动补全 类型标注 语法检查 跳 ...
- Python中的__init__.py的作用
当用 import 导入该目录时,会执行 __init__.py 里面的代码 因此在__init__.py文件中,把深层的包的路径缩短,别的地方就可以在引用到目录级别时引到深层的包.
- (转)Elasticsearch查询规则------match和term
es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索,比如 GET /megacorp/employee/_search //查询 ...
- AngularJS2.0起步
ES6工具链 要让Angular2应用跑起来不是件轻松的事,因为它用了太多还不被当前主流浏览器支持的技术.所以,我们需要一个工具链:
- 【转】SVM入门(一)SVM的八股简介
(一)SVM的八股简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够 ...
- canvas实现验证码功能
我们在做一些后台系统登录功能的时候,一般都会用到验证码,最多的就是后台生成的验证码图片返回给前端的.也可以不调用后端接口,前端使用canvas直接生成验证码. 由于功能过于简单,不需要多少代码和文字说 ...