jquery的ajax和getJson跨域

合集下载

jQuery中的Ajax几种请求方法

jQuery中的Ajax几种请求方法

jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯。

废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到).1. load( url, [data], [callback] ) :载入远程HTML 文件代码并插入至DOM 中。

url (String) : 请求的HTML页的URL地址。

data (Map) : (可选参数) 发送至服务器的key/value 数据。

callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。

这个方法默认使用GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。

jQuery 1.2 中,可以指定选择符,来筛选载入的HTML 文档,DOM 中将仅插入筛选出的HTML 代码。

语法形如"url #some > selector"。

这个方法可以很方便的动态加载一些HTML文件,例如表单。

示例代码:$(".ajax.load").load("[url]/QLeelulu/archive/2008/03/30/1130270.html[/url] .post",function (responseText, textStatus, XMLHttpRequest){this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0]//alert(responseText);//请求返回的内容//alert(textStatus);//请求状态:success,error//alert(XMLHttpRequest);//XMLHttpRequest对象});这里将显示结果。

一、Django前后端交互之Ajax和跨域问题

一、Django前后端交互之Ajax和跨域问题

⼀、Django前后端交互之Ajax和跨域问题⼀、Ajax介绍1、概述AJAX 是⼀种在⽆需重新加载整个⽹页的情况下,能够更新部分⽹页的技术。

AJAX(Asynchronous Javascript And XML)翻译成中⽂就是“异步Javascript和XML”。

即:使⽤Javascript语⾔与服务器进⾏异步交互,传输的数据为XML(当然,传输的数据不只是XML,⽐如还有JSON)。

同步交互:客户端发出⼀个请求后,需要等待服务器响应结束后,才能发出第⼆个请求;异步交互:客户端发出⼀个请求后,⽆需等待服务器响应结束,就可以发出第⼆个请求。

2、使⽤场景搜索引擎(⾕歌、百度)在⽤户输⼊某个关键字后,会出来⼀串提⽰关键字;注册页⾯,输⼊信息后,如果信息有重复或缺失,会⾃动提⽰;当我们只要修改⽹页上的部分内容时,单独局部刷新就可以做到;3、优缺点优点:AJAX使⽤Javascript技术向服务器发送异步请求;AJAX⽆须刷新整个页⾯;因为服务器响应内容不再是整个页⾯,⽽是页⾯中的局部,所以AJAX性能⾼;缺点:AJAX并不适合所有场景,很多时候还是要使⽤同步交互;AJAX虽然提⾼了⽤户体验,但⽆形中向服务器发送的请求次数增多了,导致服务器压⼒增⼤;因为AJAX是在浏览器中使⽤Javascript技术完成的,所以还需要处理浏览器兼容性问题,当然,如果使⽤jQuery的话,则不⽤考虑这个问题;⼆、通过JavaScript实现Ajax1、过程和请求相关使⽤Ajax的过程:创建核⼼对象,根据不同浏览器版本新建核⼼对象(主要原因是浏览器兼容问题);使⽤核⼼对象打开与服务器的连接(open⽅法);发送请求(send⽅法)注册监听,监听服务器响应。

(通过判断核⼼对象的就绪程度和状态码)XMLHTTPRequest关键知识点:open(请求⽅式, URL, 是否异步)send(请求体)onreadystatechange,指定监听函数,它会在xmlHttp对象的状态发⽣变化时被调⽤readyState,当前xmlHttp对象的状态,其中4状态表⽰服务器响应结束status:服务器响应的状态码,只有服务器响应结束时才有这个东东,200表⽰响应成功;responseText:获取服务器的响应体,⽂本responseXML:获取服务器的响应体,XML2、通过JavaScript实现Ajax之⽆后台交互<html><head><script type="text/javascript">function loadXMLDoc(){var xmlhttp;if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest();}else{// code for IE6, IE5xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){document.getElementById("myDiv").innerHTML=xmlhttp.responseText;}}xmlhttp.open("GET","/ajax/test1.txt",true);xmlhttp.send();}</script></head><body><div id="myDiv"><h2>Let AJAX change this text</h2></div><button type="button" onclick="loadXMLDoc()">通过 AJAX 改变内容</button></body></html>3、通过JavaScript实现Ajax之与后台交互通过Django实现,其实唯⼀区别就是在open的时候,把URL修改成Django的⼀个URL即可,包括GET和POST⽅法的URL。

jQuery跨域访问问题解决方法

jQuery跨域访问问题解决方法

jQuery跨域访问问题解决⽅法时间过得好快,⼜被拉回js战场时, 跨域问题这个伤疤⼜开疼了.好在,有jquery帮忙,跨域问题似乎没那么难缠了.这次也借此机会对跨域问题来给刨根问底,结合实际的开发项⽬,查阅了相关资料,算是解决了跨域问题..有必要记下来备忘.跨域的安全限制都是指浏览器端来说的.服务器端是不存在跨域安全限制的,所以通过本机服务器端通过类似httpclient⽅式完成“跨域访问”的⼯作,然后在浏览器端⽤AJAX获取本机服务器端“跨域访问”对应的url.来间接完成跨域访问也是可以的.但很显然开发量⽐较⼤,但限制也最少,很多widget开放平台server端(如sohu博客开放平台)其实就么搞的.不在本次讨论范围.要讨论的是浏览器端的真正跨域访问,推荐的是⽬前jQuery $.ajax()⽀持get⽅式的跨域,这其实是采⽤jsonp的⽅式来完成的.真实案例:复制代码代码如下:var qsData ={'searchWord':$("#searchWord").attr("value"),'currentUserId':$("#currentUserId").attr("value"),'conditionBean.pageSize':$("#pageSize").attr("value")}; $.ajax({async:false,url: http://跨域的dns/document!searchJSONResult.action,type: "GET",dataType: 'jsonp',jsonp: 'jsoncallback',data: qsData,timeout: 5000,beforeSend: function(){//jsonp ⽅式此⽅法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了},success: function (json) {//客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执⾏这个callback函数if(json.actionErrors.length!=0){alert(json.actionErrors);}genDynamicContent(qsData,type,json);},complete: function(XMLHttpRequest, textStatus){$.unblockUI({ fadeOut: 10 });},error: function(xhr){//jsonp ⽅式此⽅法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了//请求出错处理alert("请求出错(请检查相关度⽹络状况.)");}});注意:$.getJSON(" http://跨域的dns/document!searchJSONResult.action?name1="+value1+"&jsoncallback=?",function(json){if(json.属性名==值){// 执⾏代码}});这种⽅式其实是上例$.ajax({..}) api的⼀种⾼级封装,有些$.ajax api底层的参数就被封装⽽不可见了.这样,jquery就会拼装成如下的url get请求http://跨域的dns/document!searchJSONResult.action?&jsoncallback=jsonp1236827957501&_=1236828192549&searchWord=%E7%94%A8%E4%BE%8B&currentUserId=5351&conditionBean.pageSize=15在响应端(http://跨域的dns/document!searchJSONResult.action),通过 jsoncallback = request.getParameter("jsoncallback") 得到jquery端随后要回调的js function name:jsonp1236827957501然后 response的内容为⼀个Script Tags:"jsonp1236827957501("+按请求参数⽣成的json数组+")";jquery就会通过回调⽅法动态加载调⽤这个js tag:jsonp1236827957501(json数组);这样就达到了跨域数据交换的⽬的.jsonp的最基本的原理是:动态添加⼀个<script>标签,⽽script标签的src属性是没有跨域的限制的。

动态script标签技术结合JSON数据交换格式解决Ajax的跨域问题

动态script标签技术结合JSON数据交换格式解决Ajax的跨域问题
关 键 词 :jxJON; 态 sr t 签 ; 域 Aa ; S 动 cp 标 i 跨
1引 言
号 、 等信息 , 成绩 可能如下
< x e s0 =“10 ? ? m1 r i n v .” >
参数 apd pi ce lr uy
说明 应用的 I D,可 以去 yh o申请,测 试可 以采用 Y h o e o ao ao D m 查询的关键字
o t t 设置返回数据格式,可设置为j n up u s 或者 x 。默认 X o ml ML cl ak a 1 c 处理返回数据所用的回调函数 1 9
siO数 组 中 。 ut ] [
当我们构建好查询 网页后 ,可以在本机上 用I E或 F e x i f 等浏 览器直 接打开该 网页并测 ro
31 S N的 定 义 .J O
< td ns su e t>
< td n> su e t
< a > 三 <nme nme张 /a >
<su e tD> 0 8 < su e tD> t d n I 2 0 01 / t d n I <g a e 8 < g a e rd > 0 /rd > <su e t /t d n > <su e t t d n>
当前多数 的 We b服务都是 采用 X 作 为 ML 数据交换格式。因此 当我们在 Aa 应用中会使 j x 用 XML t R q et 象来 访问 We H t eu s对 p b服 务 的时 候就会遇到跨域 限制问题 。 跨域问题的实质是由于浏 览器对 J ac p a Sr t v i 脚本的安全限制使得在 A a 应用中只能访 问本 j x 域 的 We b服务。我们 通常选 用的解 决方案是在 本域的服务器上建立一 个跨 域代理 ( rs — Cos Do ma rx ) 间接 的访 问第三放 We i Poy来 n b服务。但 是跨域代理需 要在本 域的服务器上运行 ,不仅 浪 费服务 器资源 ,而且也增加 了开发 和维护成 本 。如果我们在编写 We b服务 的时候放弃 X ML 作 为 数 据交 换 格式 ,而 采 用 J O (aac p S N J Sr t v i O jc N tt n数据交换格式 , bet oai ) o 那么将 能够 利用 动态建立 s i 标签的方式来规避跨域限制。 cp rt 2动态 sr t c p 标签技术 i 我们 知道 , r t 签是 属 于 H M s p标 c i T L标签 , 而H M T L标签是没有跨域限制 的。从 而我们可 以使用 s i 标签 中的 s 属性来访问其他任意 cp rt r c 域的 U L链接来获取数据。 R 文 档 对 象 模 型 ( M, ou n bet DO D c metO jc Moe)为我们 提供 了动态建立 sr t d1 ci 标签的能 p 力。我们 可以在需要 的时候使 用 dc m n e — ou e tr .e a Ee et方法来建立一个 s i 标 签对象 , tl n e m 0 cp rt 并 使 用 s Atb t 方法来 设定 它 的 s 、 、 p 、 e ti e t ru 0 r i t e cdy l g a 等属性 , a ug n e 这样 当我 们使用 a pn C i 0 p ed h d l 方 法将这个 刚刚建立 的 sr t c p 标签 添加到 网页 i 中后 ,我们就能够得到这个 sr t c p 标签 sc i r 属性 的 UR L所返回的数据 。 3J O S N数据交换格式 We 服务使 用 X 作 为数 据交换 格 式是 b ML 不能 用 sr t 签访 问 We cp 标 i b服 务并 获取 数 据 的。但如果 We b服务使用 JON作为 数据交换 S 格式就不会存在这个 问题 了。

Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
});
四, $复.g制et代JS码O
代码如下:
$.getJSO N("data. $("#getJ S所ON以Re调sp用o 时需要使
);
When Ajax 载入静态 页面 load( url, (dSatraing) (cMaalpl)b(a可ck (Callbac load()方 法可以轻 复制代码
代码如下:
$("#load ing").aj $(t}h)i;s).
全局事件 也 复可制以代帮码
代码如下:
$("#msg" ).before $(t}h)i.sa)j.a xSuccess $(t}h)i.sa)j.a xError(f $}()t;his).
很显然, 第 复三制个代参码
代码如下:
$.ajax({
进一步了 解 前A面JA讨X事论 的一些方 ajaxStar t(全局事 件 be)fo开re始Se n(d局部事 件 a(j全)ax局当Se事一nd 件 s(u局)cc部请es事求s 件 aj)ax请Su求cc e全ss局事件 全 e(r局局ro部的r事请 件 aj)ax仅Er当ro r
全局事件 全 c(o局局mp部的le事发te 件 aj)ax不Co管mp l全et局e事件 全 a(j全局ax局的St事请op 件 局)部当事没件 在之前的 复制代码
代码如下:
$('#ajax 这样, d复at制a.代ht码m
代码如下:
$('#ajax -
实现GET 和POST方 get( url, (dSatraing) (cMaalpl)b(a可ck (Callbac 很显然这 是一个专 复制代码
代码如下:
$.get('l ogin.pihdp

详解ajax跨域问题解决方案

详解ajax跨域问题解决方案

详解ajax跨域问题解决⽅案今天来记录⼀下关于ajax跨域的⼀些问题。

以备不时之需。

跨域同源策略限制同源策略阻⽌从⼀个域上加载的脚本获取或操作另⼀个域上的⽂档属性。

也就是说,受到请求的 URL 的域必须与当前 Web页⾯的域相同。

这意味着浏览器隔离来⾃不同源的内容,以防⽌它们之间的操作。

解决⽅式通常来说,⽐较通⽤的有如下两种⽅式,⼀种是从服务器端下⼿,另⼀种则是从客户端的⾓度出发。

⼆者各有利弊,具体要使⽤哪种⽅式还需要具体的分析。

1. 服务器设置响应头2. 服务器代理3. 客户端采⽤脚本回调机制。

⽅式⼀Access-Control-Allow-Origin 关键字只有在服务器端进⾏设置才会⽣效。

也就是说即使再客户端使⽤xmlhttprequest.setHeaderREquest('xx','xx');也不会有什么效果。

正常ajax请求下⾯来模拟⼀下ajax⾮跨域请求的案例实现。

test1.html<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>ajax 测试</title></head><body><input type="button" value="Test" onclick="crossDomainRequest()"><div id="content"></div><script>var xhr = new XMLHttpRequest();var url = 'http://localhost/learn/ajax/test1.php';function crossDomainRequest() {document.getElementById('content').innerHTML = "<font color='red'>loading...</font>";// 延迟执⾏setTimeout(function () {if (xhr) {xhr.open('GEt', url, true);xhr.onreadystatechange = handle_response;xhr.send(null);} else {document.getElementById('content').innerText = "不能创建XMLHttpRequest对象";}}, 3000);}function handle_response() {var container = document.getElementById('content');if (xhr.readyState == 4) {if (xhr.status == 200 || xhr.status == 304) {container.innerHTML = xhr.responseText;} else {container.innerText = '不能跨域请求';}}}</script></body></html>同级⽬录下的test1.PHP内容如下:<?phpecho "It Works.";>跨域请求刚才是HTML⽂件和php⽂件都在Apache的容器下,所以没有出现跨域的情形,现在把HTML⽂件放到桌⾯上,这样再次请求PHP数据的话,就营造了这样⼀个“跨域请求”了。

jQuery操作Ajax和Json

jQuery操作Ajax和Json

jQuery操作Ajax和Json嗯,自己学SSH和做项目也已有两个月了。

自己今天来整理一下自己在项目中利用jQuery操作过的Ajax和Json。

当时我对于jQuery操作Ajax几乎不怎么了解,但是项目中有需求,所以自己也是必须要去使用,因此现在来详细讲解一下自己在项目中的操作。

功能中,有一个下拉框,里面存储的是服务商的信息,首选项是“--请选择--”,当我选择第一个下拉框中服务商信息之后,后面紧接着将会得到这个选定的服务商下的所有产品。

做一个联动操作。

虽然我不会用jQuery操作Ajax,但是我第一反应就是想到利用这块技术,于是自己就开始查找对应的资料了。

首先,我在Action中,将服务商的信息从数据库查找出来,保存到List集合中,将集合转发到JSP界面上,利用的是struts2标签:<div><s:select name="provider.iscenicid"list="#request.providerList"listKey="i scenicid"listValue="szcenicname"headerKey=""headerValue="--请选择"onchange="onChangeOptionScenic(this)"id="scenicType"/></s:select><span id="productInfo"></span></div>(ps:其实这个里面,本不应该设置headerKey和headerValue,应该在Action中在List集合中去增加一行再进行操作。

)中间的span标签就是将要利用jQuery操作Ajax把产品信息增加到span标签里面!其次,进行jQuery操作Ajax了:<script>function onChangeOptionScenic(_this) {// 获取下拉框中的listKey值var iscenic =$(_this).val();// 设置一个变量,来进行下面的操作var htmltv ="";// 设置URL地址var url ="/tips/travelmessage.action";// Ajax操作开始$.ajax ({// 设定URLurl : url,// 设置提交方式,这里为posttype : "post",// 设置数据类型为JsondataType : "json",// 设置传过去的值的属性名data : {"iscenicid" : iscenic},// 成功返回之后的操作方法success : function(result) {// 获取Action中传回来的result的值var json =eval("("+result+")");// 循环将服务商下的产品以复选框形式拼接出来for(var i=0; i<json.length; i++) {// 将产品信息以复选框形式拼接起来htmltv +="<input type='checkbox' name='productNa me'value='"+json[i].productId+"'/>"+json[i].prod uctName;}// 添加到上面的span标签中$("#productInfo").val(htmltv);}});}</script>最后,将result进行一个映射文件的配置,配置信息如下(根据公司的一些设定而操作):<action name="travelmessage"class="com.web.system.tips.TravelMessageAction" method="trav elMessage"><result type="json"><param name="root">result</param></result></action>在TravelMessageAction中,需要将内容返回到result中,部分代码如下:List productList = travelMessageService.getProductInfo(product);JSONArray json =new JSONArray().fromObject(productList);result = json.toString();return SUCCESS;至此,一个完整的操作已完成,这就是自己的一点点整理,希望以后有更多的有技术的知识与大家分享!。

ajax传值,jQuery.ajax,json格式转化和前台后台传值

ajax传值,jQuery.ajax,json格式转化和前台后台传值

1.ajax传输用字符串,后台接收参数用request.getParameter,所以前台必须有Parameter 如"/FirstServlet/regPage?countryId=" + countryId2.后台向前台传参数通过response,PrintWriter pw = resp.getWriter();pw.print(“df”);前台接收参数用var txt = xhr.responseText;3.如果用json字符串传输前台用jQuery.ajax是如下data : {'mydata':jsonStr},jQuery.ajax({type: "post",url: url,dataType : 'json',data : {'mydata':jsonStr},success: function(data,textStatus){alert("操作成功");},error: function(xhr,status,errMsg){alert("操作失败!");}});后台一样用request如String jsonStr = ServletActionContext.getRequest().getParameter("mydata");4.后台向前台传值一样用response如pw.print(jsonList.toString());前台接收jQuery用success: function(data,textStatus)data就是一个json(自动将json字符串转化为了json)5.json与json字符串之间的转化json的格式两种:数组["hello", 12, true , null];和对象{ "color": "red", "doors" : 4, "paidFor" : true };前台:json-json字符串JSON.stringify(jsonobj);$("#form").serialize()//表单转化为json字符串json字符串-jsoneval('(' + jsonstr + ')');JSON.parse(jsonstr);使用Function对象来进行返回解析function(data,textStatus){后台:json-json字符串jsonObj.toString()json字符串-jsonJSONObject obj1 = JSONObject.fromObject("{'dsaf':'uuuu'}");JSONObject obj = JSONObject.fromObject(address);//把对象转化为json。

jQuery通过ajax方法获取json数据不执行success的原因及解决方法

jQuery通过ajax方法获取json数据不执行success的原因及解决方法

jQuery通过ajax⽅法获取json数据不执⾏success的原因及解决⽅法1.jquery通过ajax⽅法获取json数据不执⾏success回调问题描述:jquery通过ajax⽅法获取json数据不执⾏success回调⽅法问题原因:json格式存在问题或不符合标准写法,导致总是执⾏error回调⽅法解决⽅案:使json格式务必符合下述3个标准写法: 1)键名称:⽤双引号括起; 2)字符串:⽤双引号括起; 3)数字,布尔值不需要使⽤双引号括起;注意:⼀定是双括号!2.jQuery中ajax使⽤json数据类型总是跳过success执⾏error语句执⾏函数error : function(XMLHttpRequest, textStatus, errorThrown) {//这个error函数调试时⾮常有⽤,如果解析不正确,将会弹出错误框 alert(XMLHttpRequest.responseText);alert(XMLHttpRequest.status);alert(XMLHttpRequest.readyState);alert(textStatus); // parser error;}就明⽩错误信息了;弹出的框⾥显⽰:<!DOCTYPE html PUBLIC "-//W3C //DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD /xhtml1-transitional.dtd">以及<?xml version="1.0" encoding="gb2312" ?>这两句话,虽然不清楚为什么,我删除之后,就成功执⾏ success了3.$.ajax()中的URL跨域时,总是不执⾏success,⽼进⼊error1)我加上ServletActionContext.getResponse().setHeader("Access-Control-Allow-Origin", "*");解决跨域问题,就顺利进⼊success了2)dataType:"json",去掉看能进success 不。

jqueryajax调用springboot接口发送json数据示例,兼容跨域调用,解决m。。。

jqueryajax调用springboot接口发送json数据示例,兼容跨域调用,解决m。。。

jqueryajax调⽤springboot接⼝发送json数据⽰例,兼容跨域调⽤,解决m。

本⽂主要解决三个问题:1.解决maven项⽬中引⽤本地lib⽬录的jar包时打包失败的问题2.解决spring boot开发的微服务接⼝中的跨域问题3.ajax 发送json数据的问题昨天研究 office 外接程序开发时,发现在插件中调⽤后台由 Spring boot 开发的接⼝并传递json时总是失败,调试了半天,尝试了$.ajax,$.post等⽅法服务端均⽆法获取到正确的请求,发送到后端的请求的格式是application/www-urlencode,⽽后端接受的是application/json格式的数据,由于⽤postman测试接⼝可以正常返回,应该可以说明后台接⼝没有问题。

1.解决maven项⽬中引⽤本地lib⽬录的jar包时打包失败的问题其实在⼀开始编写后台接⼝时,也遇到了⼀些问题,因为接⼝中引⽤了⼀个项⽬本地的lib⽬录中的jar包,⽽这个jar包并未⽤maven管理,所以调试和打包上遇到了⼀些问题,以前使⽤mvn clean install就可以完成的动作,现在⼀直报错,在pom中这样修改就可以解决了:<build><!-- 加上下⾯的,mvn命令会报错,现在直接调试完毕后,mvn package即可--><resources><resource><directory>lib</directory><targetPath>/BOOT-INF/lib/</targetPath><includes><include>**/*.jar</include></includes></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><skip>true</skip></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration></plugin></plugins></build>2.解决spring boot开发的微服务接⼝中的跨域问题由于服务端⽇志中⼀直观察不到ajax调⽤的正确请求,于是祭出终极⼤杀器——抓包,打开WireShark,选择对应的⽹卡,参数设置成:ip.dst_host== 你接⼝服务器的ip && tcp.dstport ==你接⼝服务监听的端⼝抓包后发现,第⼀个HTTP请求竟然不是POST,⽽是OPTIONS:这不是我嘞个⼤擦了么…… ⽴马拿出万能钥匙——⾕歌搜索引擎开始解决问题,输⼊关键字“http options request”,看到第⼀条就应该是我要的答案了:沿着指路明灯给出的航向继续前进():OPTIONSThe HTTP OPTIONS method requests permitted communication options for a given URL or server. A client can specify a URL with thismethod, or an asterisk (*) to refer to the entire server.继续往下翻,看到了这段⽂字:In , a is sent with the OPTIONS method so that the server can respond if it is acceptable to send the request. In this example, we will request permission for these parameters:The header sent in the preflight request tells the server that when the actual request is sent, it will have a request method.The header tells the server that when the actual request is sent, it will have the X-PINGOTHER and Content-Type headers.我恍然⼤悟,原来是跨域调⽤的问题。

jQuery AJAX和JSON例子

jQuery AJAX和JSON例子

基于jQuery的AJAX和JSON的实例通过jQuery内置的AJAX功能,直接访问后台获得JSON格式的数据,然后通过jQuer把数据绑定到事先设计好的html模板上,直接在页面上显示。

我们先来看一下html模板:<table id="datas" border="1" cellspacing="0" style="border-collapse: collapse"><tr><th>订单ID</th><th>客户ID</th><th>雇员ID</th><th>订购日期</th><th>发货日期</th><th>货主名称</th><th>货主地址</th><th>货主城市</th><th>更多信息</th></tr><tr id="template"><td id="OrderID"></td><td id="CustomerID"></td><td id="EmployeeID"></td><td id="OrderDate"></td><td id="ShippedDate"></td><td id="ShippedName"></td><td id="ShippedAddress"></td><td id="ShippedCity"></td><td id="more"></td></tr></table>一定要注意的就是里面所有的id属性,这个是一个关键。

使用jQuery的ajax方法向服务器发出get和post请求的方法

使用jQuery的ajax方法向服务器发出get和post请求的方法

使⽤jQuery的ajax⽅法向服务器发出get和post请求的⽅法打算写个ajax系列的博⽂,主要是写给⾃⼰看,学习下ajax的相关知识和⽤法,以更好的在⼯作中使⽤ajax。

假设有个⽹站A,它有⼀个简单的输⼊⽤户名的页⾯,界⾯上有两个输⼊框,第⼀个输⼊框包含在⼀个form表单⾥⽤来实现form提交,第⼆个输⼊框是单独的、没有包含在form⾥,下⾯就⽤这两个输⼊框来学习下jQuery的ajax。

1,前端的html和javascript代码页⾯html<main style="text-align: center; margin: 200px auto;"><h2>输⼊⽤户名</h2><form class="" action="demo01.php" method="post" style="margin-bottom: 20px;"><input id="user-name" type="text" name="username" placeholder="请填写您的⽤户名"><input type="submit" name="submit1" value="form提交1" class="input"></form><input id="user-name2" type="text" name="username2" placeholder="请填写您的⽤户名"><input type="button" name="submit2" value="ajax提交2"><div class="box"></div></main><script src="../../js/jquery-3.1.0.min.js"></script><script src="demo.js"></script>页⾯中引⼊的demo01.js代码,注意此处实现的是⼀个简单的GET请求。

getjson的用法

getjson的用法

getjson的用法
jQuery的getJSON方法是一种前端取JSON数据的高效方式,其语法简单易用,尤其适用于异步请求。

可以有效地解决Ajax运行复杂的同步请求的问题,提高程
序的运行效率。

谈起jQuery的getJSON方法,首先要说的是它的使用方法。

基本使用格式如下:
$.getJSON("url/to/data", function(data){ //返回的data默认为JSON格式 //在此处
可以处理返回的JSON数据 });
其中,前面的第一个参数是JSON文件所在url地址,第二个参数是通过回调
函数处理返回的JSON数据,最后调用getJSON即可完成JSON数据的获取。

另外,为了避免浏览器出现同源策略的错误,可以借助公共API实现越域调用的效果,两种常用的方式是jsonp和websocket协议。

jsonp协议可以实现跨域调用,解决浏览器跨域错误的原理是通过<script>标签
对数据进行获取,其中需要指定函数名称来接收取得的数据。

websocket是一种新
型的网络协议,可以解决跨域调用及单页应用中数据实时同步更新的问题,使用它可以使前端和后端保持长连接。

总之,jQuery的getJSON方法可以快速方便地获取JSON格式的数据,在保证跨域安全的前提下可以使用jsonp或websocket协议,有效的提高前端运行效率,
使得界面更加易于操作。

通过代码示例学习JSon、AJAX、JQuery和跨域访问的应用技术

通过代码示例学习JSon、AJAX、JQuery和跨域访问的应用技术

前言JSON采用完全独立于语言的文本格式,从而使得在JavaScript相关程序中处理JSON 格式的数据不需要应用任何特殊的API或软件工具包,这使得JSON成为理想的数据交换语言。

随着Web应用的普及及AJAX相关应用的深入,客户端和Web服务器端需要频繁地交互数据;同时随着移动设备的普及,客户端的访问设备也逐渐多样化。

如何使得同一Web 服务器能够响应不同的终端设备,并且都能够进行数据交互。

目前比较好的技术实现手段是应用JSon相关的技术。

作者根据自身多年的软件开发实践和经验总结,结合多年的IT职业培训的教学和高校软件学院一线的教学工作体验,在本系列文档中将从多个不同的方面和通过具体的程序代码示例为读者介绍JSon及相关的应用技术。

本文档主要涉及JSon的语法规则、JSon在AJAX 中的应用、JQuery对JSon的技术支持和应用JSonp协议实现跨域访问技术和应用示例。

欢迎读者下载相关的技术资料阅读和收藏,并提出良好的建议。

感兴趣的读者可以在百度文库页面中搜索“杨少波”,将能够搜索到杨教授工作室精心创作的优秀程序员职业提升必读系列技术资料。

这些资料将系统地从软件设计和开发实现的“设计思想”、“管理策略”、“技术实现”和“经验方法”等方面与读者进行充分的交流,也欢迎读者发表和交流自己对软件开发、课程设计、项目实训、技术学习的心得体会。

本文目录1.1JSON相关技术基础 (4)1.1.1JSON相关的技术基础 (4)1.1.2JSON对象表示的语法 (5)1.2JSON和JavaScript之间转换 (12)1.2.1将JSon格式的字符串转换为JavaScript对象 (12)1.2.2转换技术的应用示例 (16)1.3JSON系统包json.js (24)1.3.1JSON的官方网站 (24)1.3.2JSON 系统库中的stringify 函数 (25)1.3.3JSON 系统库中的parse函数 (28)1.4在AJAX中应用JSon实现客户/服务器之间交换数据 (31)1.4.1JSon格式的字符串特别适合于AJAX的数据传递 (31)1.4.2获得服务器端返回的JSON对象字符串 (32)1.4.3在客户端JS程序中向服务器端程序发送JSON对象字符串 (39)1.5JQuery和JSON相互配合应用AJAX技术 (46)1.5.1JQuery中与AJAX技术相关的几个函数 (46)1.5.2$.getScript()和$.getJSON()函数的各种调用形式示例 (49)1.5.3$.ajax()函数的各种调用形式示例 (52)1.6JavaScript中的跨域访问技术及示例 (55)1.6.1JSONP协议及相关实现技术 (55)1.6.2应用JQuery实现跨域访问示例 (59)1.6.3应用普通的JavaScript脚本实现跨域访问示例 (68)1.7JQuery和AJAX技术相互配合的应用示例 (70)1.7.1构建相关的JSP页面和JavaScript脚本代码 (70)1.7.2构建服务器端相关的Servlet程序 (74)1.7.3解决中文乱码的问题 (79)1.8动态加载页面数据的应用示例 (81)1.8.1构建相关的页面及JS脚本程序 (81)1.8.2测试相关的程序效果 (84)1.8.3用ajax函数读取和解析XML文件中数据的应用示例 (84)1.1JSON相关技术基础1.1.1JSON相关的技术基础1、JSON是什么JSON的全称JavaScript Object Notation,JavaScript对象表示法。

jquery 跨域请求的三种方法

jquery 跨域请求的三种方法

一、概述在Web开发中,跨域请求是一个常见的问题。

由于同源策略的限制,浏览器在发送AJAX请求时只能访问相同域名下的资源。

然而,随着互联网的发展,我们经常需要在不同的域名之间进行数据交换,这就需要对跨域请求进行处理。

本文将介绍使用jquery进行跨域请求的三种方法,希望能够帮助开发者更好地理解和应用这一技术。

二、跨域请求的概念我们需要了解跨域请求的概念。

所谓跨域请求,就是在一个域名下向另一个域名发送HTTP请求。

在HTTP协议中,域名是由协议、主机名和端口号组成的。

如果这三者有任何一个不同,就会被认为是跨域请求。

跨域请求受到同源策略的限制,因此需要进行特殊处理才能实现。

三、使用jquery进行跨域请求的三种方法1. jsonpjsonp是一种常用的跨域请求方法。

它利用了HTML元素中的<script>标签可以跨域加载资源的特性。

在jquery中,我们可以使用$.ajax()方法发送jsonp请求。

例如:```javascript$.ajax({url: 'xxxdataType: 'jsonp',success: function(data) {// 处理返回的数据}});```在这个例子中,我们通过设置dataType为'jsonp'来发送jsonp请求。

服务器端需要返回一个以callback函数包裹的JSON数据,jquery会自动执行这个callback函数,并将返回的数据传递给success回调函数。

2. CORSCORS(Cross-Origin Resource Sharing)是一种冠方标准的跨域请求解决方案。

它通过在HTTP头部加入一些特殊的字段来实现跨域资源共享。

在jquery中,我们也可以通过$.ajax()方法发送CORS请求。

例如:```javascript$.ajax({url: 'xxxcrossDom本人n: true,xhrFields: {withCredentials: true},success: function(data) {// 处理返回的数据}});```在这个例子中,我们通过设置crossDom本人n为true来告诉jquery这是一个跨域请求,并通过xhrFields设置withCredentials 为true来发送包含凭据的请求。

jquery中ajax处理跨域的三大方式

jquery中ajax处理跨域的三大方式

jquery中ajax处理跨域的三⼤⽅式由于JS同源策略的影响,因此js只能访问同域名下的⽂档。

因此要实现跨域,⼀般有以下⼏个⽅法:⼀、处理跨域的⽅式:1.代理2.XHR2HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问。

但ie10以下不⽀持只需要在服务端填上响应头:header("Access-Control-Allow-Origin:*");/*星号表⽰所有的域都可以接受,*/header("Access-Control-Allow-Methods:GET,POST");3.jsonP原理:ajax本⾝是不可以跨域的,通过产⽣⼀个script标签来实现跨域。

因为script标签的src属性是没有跨域的限制的。

其实设置了dataType: 'jsonp'后,$.ajax⽅法就和ajax XmlHttpRequest没什么关系了,取⽽代之的则是JSONP协议。

JSONP是⼀个⾮官⽅的协议,它允许在服务器端集成Script tags返回⾄客户端,通过javascript callback的形式实现跨域访问。

ajax的跨域写法:(其余写法和不跨域的⼀样):⽐如/*当前⽹址是localhost:3000*/js代码$.ajax({type:"get",url:"http://localhost:3000/showAll",/*url写异域的请求地址*/dataType:"jsonp",/*加上datatype*/jsonpCallback:"cb",/*设置⼀个回调函数,名字随便取,和下⾯的函数⾥的名字相同就⾏*/success:function(){。

}});/*⽽在异域服务器上,*/app.jsapp.get('/showAll',students.showAll);/*这和不跨域的写法相同*//*在异域服务器的showAll函数⾥,*/var db = require("./database");exports.showAll = function(req,res){/**设置响应头允许ajax跨域访问**/res.setHeader("Access-Control-Allow-Origin","*");/*星号表⽰所有的异域请求都可以接受,*/res.setHeader("Access-Control-Allow-Methods","GET,POST");var con = db.getCon();con.query("select * from t_students",function(error,rows){if(error){console.log("数据库出错:"+error);}else{/*注意这⾥,返回的就是jsonP的回调函数名+数据了*/res.send("cb("+JSON.stringify(r)+")");}});}⼆、解决ajax跨域访问、 JQuery 的跨域⽅法JS的跨域问题,我想很多程序员的脑海⾥⾯还认为JS是不能跨域的,其实这是⼀个错误的观点;有很多⼈在⽹上找其解决⽅法,教其⽤IFRAME去解决的⽂章很多,真有那么复杂吗?其实很简单的,如果你⽤JQUERY,⼀个GETJSON⽅法就搞定了,⽽且是⼀⾏代码搞定。

Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的⽤法总结详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()⼀,$.get(url,[data],[callback])说明:url为请求地址,data为请求数据的列表,callback为请求成功后的回调函数,该函数接受两个参数,第⼀个为服务器返回的数据,第⼆个参数为服务器的状态,是可选参数。

⽽其中,服务器返回数据的格式其实是字符串形势,并不是我们想要的json数据格式,在此引⽤只是为了对⽐说明复制代码代码如下:$.get("data.php",$("#firstName.val()"),function(data){$("#getResponse").html(data); }//返回的data是字符串类型);⼆,$.post(url,[data],[callback],[type])说明:这个函数跟$.get()参数差不多,多了⼀个type参数,type为请求的数据类型,可以是html,xml,json等类型,如果我们设置这个参数为:json,那么返回的格式则是json格式的,如果没有设置,就和$.get()返回的格式⼀样,都是字符串的复制代码代码如下:$.post("data.php",$("#firstName.val()"),function(data){$("#postResponse").html();},"json"//设置了获取数据的类型,所以得到的数据格式为json类型的);三,$.ajax(opiton)说明:$.ajax()这个函数功能强⼤,可以对ajax进⾏许多精确的控制,需要详细说明的请参照相关资料复制代码代码如下:$.ajax({url: "ajax/ajax_selectPicType.aspx",data:{Full:"fu"},type: "POST",dataType:'json',success:CallBack,error:function(er){BackErr(er);}});四,$.getJSON(url,[data],[callback])复制代码代码如下:$.getJSON("data.php",$("#firstName.val()"),function(jsonData){$("#getJSONResponse").html(jsonData.id);}//⽆需设置,直接获取的数据类型为json,所以调⽤时需要使⽤jsonData.id⽅式);When Ajax meets jQuery 基于AJAX的应⽤现在越来越多,⽽对于前台开发⼈员来说,直接和底层的HTTPRequest打交道⼜不是⼀件令⼈愉快的事情。

jQuery中$.ajax解析xml、json格式数据

jQuery中$.ajax解析xml、json格式数据

jQuery中$.ajax解析xml、json格式数据$.ajax()方法参数详解:url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。

注意:这个要访问url必须与js文件在同一个域,否则会报错。

type: 要求为String类型的参数,请求方式(post或get)默认为get。

注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。

timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。

此设置将覆盖$.ajaxSetup()方法的全局设置。

async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。

如果需要发送同步请求,请将此选项设置为false。

注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。

cache:要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false)。

设置为false将不会从浏览器缓存中加载请求信息。

data: 要求为Object或String类型的参数,发送到服务器的数据。

如果已经不是字符串,将自动转换为字符串格式。

get请求中将附加在url后。

防止这种自动转换,可以查看processData选项。

对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。

如果是数组,jQuery将自动为不同值对应同一个名称。

例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。

dataType: 要求为String类型的参数,预期服务器返回的数据类型。

如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。

javascript获取数据的方法

javascript获取数据的方法

javascript获取数据的方法JavaScript获取数据的方法:在使用JavaScript开发过程中,经常需要从外部数据源获取数据。

以下是一些常用的JavaScript获取数据的方法:1. AJAX请求:使用XMLHttpRequest对象可以通过发送异步请求获取数据。

通过open方法设置请求的方法(GET或POST)、URL和是否异步。

然后通过send方法发送请求。

可以通过onreadystatechange事件来监听请求的状态变化,并在请求完成时处理返回的数据。

2. Fetch API:Fetch API是一种新的网络请求接口,提供了更强大和灵活的功能。

使用fetch方法可以发送GET、POST等不同类型的请求,并使用Promise对象来处理响应。

可以设置请求的URL、请求头、请求体等参数,并通过then方法来处理返回的数据。

3. jQuery AJAX:如果您在项目中使用了jQuery库,可以使用其提供的AJAX方法来发送异步请求。

通过$.ajax方法可以设置请求的方法、URL、数据类型等参数,并通过success回调函数处理返回的数据。

4. JSONP:如果需要从跨域的服务器获取数据,可以使用JSONP方法。

JSONP是一种通过动态创建script标签来实现跨域请求的机制。

服务器返回的数据将被包裹在回调函数中,这样就可以在客户端中获取到数据。

5. WebSockets:如果需要实现实时通信,可以使用WebSocket。

WebSocket提供了双向通信的能力,可以在客户端和服务器之间进行实时交互。

通过创建WebSocket对象,可以建立与服务器的连接,并通过监听事件来处理接收到的数据。

这些方法都可以用于获取各种类型的数据,如JSON数据、文本数据、XML数据等。

根据不同的需求和场景,选择适合的方法可以更加高效地获取数据并进行处理。

记得在使用这些方法时,要考虑到数据安全性和错误处理机制。

jquery的ajax常用方法

jquery的ajax常用方法
});
else
add(j, jQuery.isFunction(a[j]) ? a[j]() : a[j]);
// 返回生成字符串
return s.join("&").replace(/%20/g, "+");
}
Get&post
// 如果不是字符集串就转换在查询字符集串
if (s.data && s.processData && typeof s.data != "string")
s.data = jQuery.param(s.data);
// 构建jsonp请求字符集串。jsonp是跨域请求,要加上callback=?后面将会加函数名
7.1 jquery的ajax常用方法
对于Ajax原理不深入分析。Jquery肯定也会提供Ajax的实现。对于ajax的请求,可以分成如下的几步:
1、通过 new XMLHttpRequest 或其它的形式(指IE)生成ajax的对象xhr。
2、通过xhr.open(type, url, async, username, password)的形式建立一个连接。
3、通过setRequestHeader设定xhr的请求头部(request header)。
4、通过send(data)请求服务器端的数据。
5、执行在xhr上注册的onreadystatechange回调处理返回数据。
任何的lib都是在这几步之上进行相关扩展而达到自己的功能。这几步之中,对于url,我们要考虑是跨域请求怎么办,ajax为了安全的考虑不支持跨域请求,那么对于这个问题,Jquery和Ext都是采用scriptTag的方式。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

很多开发人员在使用jquery在前端和服务器端进行数据交互,所以很容易会认为在前端利用jquery就可以读取任何站点的数据了。

近日在进行开发时,因为要和第三方公司的一个项目进行数据的共享,因为考虑多不占用服务器的资源,遂决定直接在html进行数据的读取,不走服务器端进行中转了。

然后正好就遇到了浏览器端跨域访问的问题。

跨域的安全限制都是指浏览器端来说的,服务器端不存在跨域安全限制的问题。

目前浏览器端跨域访问常用的两种方法有两种:
1、通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的。

jsonp是英文json with padding的缩写。

它允许在服务器端生成script tags至返回至客户端,也就是动态生成javascript 标签,通过javascript callback的形式实现数据读取。

html页面端示例代码:
代码如下:
//首先要引入jquery的js包
jQuery(document).ready(function(){
$.ajax({
type : "get", //jquey是不支持post方式跨域的
async:false,
url : "/apitools/ajax_props.do", //跨域请求的URL
dataType : "jsonp",
//传递给请求处理程序,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonp: "jsoncallback",
//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
jsonpCallback:"success_jsonpCallback",
//成功获取跨域服务器上的json数据后,会动态执行这个callback函数
success : function(json){
alert(json);
}
});
});
服务器端示例代码,以java为例:
服务器端代码,是重点,开始以为,只要客户端通过jsonp就可以直接跨域访问,其实不然,需要服务器端的支持才行。

代码如下:
public void jsonpTest() throws IOException{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
//根据html指定的jsonp回调函数的参数名,获取回调函数的名称
//callbackName的值其实就是:success_jsonpCallback
String callbackName = (String)request.getAttribute("jsoncallback");
//简单模拟一个json字符串,实际可使用google的gson进行转换,次数通过字符串拼接
//{"name":"张三","age":28}
//\是对"号进行转义
String jsonStr = "{\"name\":\"张三\",\"age\":28}";
//最终返回的数据为:success_jsonpCallback({"name":"张三","age":28})
String renderStr = callbackName+"("+jsonStr+")";
response.setContentType("text/plain;charset=UTF-8");
response.getWriter().write(renderStr);
}
jsonp的原理:
首先在客户端注册一个callback (如:'jsoncallback'), 然后把callback的名字(如:success_jsonpCallback)传给服务器端对应的处理函数。

服务器先生成需要返回给客户端的json 数据。

然后以javascript 语法的方式,生成一个function , function 名字就是传递上来的参数(jsoncallback)的值(success_jsonpCallback) 。

最后将json 数据直接以入参的方式,放置到function 中,这样就生成了一段js 语法的文档,返回给客户端。

客户端浏览器,解析script标签,并将服务器端返回的数据,作为参数,
传入到了客户端预先定义好的callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里。

实际上跨域是通过动态增加script来加载数据,无法直接获得数据,所以需要使用回调函数。

2.使用jquery的getJson进行跨域读取数据
实际上getJson方式的根本原理和ajax使用jsonp的方式是一样的。

jquery中常用getJson来调用获取远程的数据,并通过json格式返回。

函数的原型如下:
jQuery.getJSON(url,data,success(data,status,xhr))
参数描述
url 必需。

规定将请求发送的哪个URL。

data 可选。

规定连同请求发送到服务器的数据。

success(data,status,xhr)
可选。

规定当请求成功时运行的函数。

额外的参数:
response - 包含来自请求的结果数据
status - 包含请求的状态
xhr - 包含XMLHttpRequest 对象
该函数是简写的ajax函数,实际上等价于:
代码如下:
$.ajax({
url: url,
data: data,
success: callback,
dataType: json
});
言归正传,下面我们来看如何使用getJson跨域获取数据。

html页面示例代码:
代码如下:
$.getJSON("/apitools/ajax_props.do&jsoncallback=?",
function (data) {
alert(data);
}
);
执行原理:
发送请求时需要传一个callback的回调函数名到服务器端,服务器端拿到这个回调函数名,再将返回数据用参数的形式反回到客户端,这样客户端就能够调到。

所以发送请求URL的地址后面一定要上jsoncallback=?这样的参数,jquery会将?号自动替换成自动生成的回调函数的名称。

所以最终的实际请求为:/apitools/ajax_props.do&jsoncallback=jsonp1322444422697
所以和ajax的方式想比较,也就是callback函数一个是自动生成的函数名,一个是手工指定的函数名。

相关文档
最新文档