jquery的ajax和getJson跨域获取json数据
- 格式:doc
- 大小:28.50 KB
- 文档页数:2
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和跨域问题⼀、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跨域访问问题解决⽅法时间过得好快,⼜被拉回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¤tUserId=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属性是没有跨域的限制的。
一、什么是getjsongetjson是一个使用方便的jQuery函数,用于从服务器获取JSON格式的数据。
它可以通过HTTP GET请求从服务器上获取JSON数据,然后将数据作为Javascript对象解析并传递给指定的回调函数。
二、getjson的基本语法getjson函数的基本语法如下所示:$.getJSON( url [, data ] [, success ] )其中,url表示要获取JSON数据的位置区域;data是一个可选的包含请求参数的对象;success是一个可选的回调函数,用于在获取数据成功时执行。
三、使用getjson获取本地json文件的方法1. 在HTML文档中引入jQuery库首先需要在HTML文档中引入jQuery库,可以通过以下方式实现: <script src="网络协议sxxx"></script>2. 创建本地json文件在项目的根目录下创建一个json文件,例如data.json,用于存储需要获取的JSON数据。
3. 编写Javascript代码接下来编写Javascript代码,使用getjson函数获取本地json文件的数据并进行处理。
代码示例如下:```$(document).ready(function(){$.getJSON("data.json", function(data){// 数据获取成功后的处理逻辑console.log(data);});});```4. 在HTML中调用Javascript代码将上述Javascript代码嵌入到HTML文档中,并确保在文档加载完成后执行该代码。
可以通过以下方式实现:```<html><head><script src="网络协议sxxx"></script><script>$(document).ready(function(){$.getJSON("data.json", function(data){// 数据获取成功后的处理逻辑console.log(data);});});</script></head><body><!-- 页面内容 --></body></html>```四、注意事项1. JSON文件必须符合严格的JSON格式,否则可能导致数据解析失败。
JQuery中的AJAX详解目录(?)[-]load()方法load(url,[data],[callback])url为被加载的页面地址data表示发送到服务器的数据,格式为key/valuecallback格式为:function(responseText,textStatus,XMLHttpRequest){ }//responseText:请求返回的内容//textStatus:请求状态:success、error、notmodified、timeout这4种//XMLHttpRequest:XMLHttpRequest对象load()方法的传递方式根据参数data来自动指定。
如果没有参数传递,则采用GET方式传递;反之,则自动转换为POST 方式[javascript]view plaincopyprint?1.$("#div1").load(2."jsp/feed.jsp", //如果为" jsp/feed.jsp .filterClass",则表示获取jsp页面中类名为filterClass的全部元素3.{4. name :clf, age : 255.//经测试,变量名加引号、单引号、不加引号,后台都能取到值6.//如果含有中文,必须用encodeURI()进行编码,然后再服务器端用decodeURI()解码即可,如7.// {name:encodeURI($("#uName").val()),"password":$("#uPassword").val()},8.}, //也可以用数组传值,{"attr []",["clf","25","male"]}9.function (){10. $("#div2").text("AJAX");11.}12.);[javascript]view plaincopyprint?1.$("div").load("wrongname.xml",function(response,status,xhr){2.if (status=="success")3. {4. $("div").html("<ol></ol>");5. $(response).find("artist").each(function(){6. <span style="white-space:pre"> </span>varitem_text = $(this).text();7. <span style="white-space:pre"> </span>$('<li></li>').html(item_text).appendTo('ol');8. <span style="white-space:pre"> </span> });9. }10.else11. {12. $("div").html("Anerror occured: <br/>" + xhr.status + " " + xhr.statusText)13. }14. });getJSON()方法getJSON(url,[data],[callback])callback格式为function(data,textStatus) { }data是一个返回的json对象[javascript]view plaincopyprint?1.$.getJSON("test.js",{ name: "John", time: "2pm" }, function(json){2. alert("JSON Data: " +ers[3].name);3.});getScript()方法getScript(url,[callback])callback格式为function(response,status)response - 包含来自请求的结果数据status - 包含请求的状态("success","notmodified", "error", "timeout" 或"parsererror")通过此函数注入的脚本会自动执行get()方法get(url,data,callback(response,status,xhr),dataType)dataType可能的类型:"xml"、"html" 、"text"、"script"、"json"、"jsonp"get() 方法通过远程HTTPGET 请求载入信息。
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;至此,一个完整的操作已完成,这就是自己的一点点整理,希望以后有更多的有技术的知识与大家分享!。
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数据,在处理的过程中遇到下面的几个问题,那就是采用不同的方式来生成json数据的时候,在$.ajax方法中应该是如何来处理的,下面依次来进行说明,由于本人使用的是,所以处理的页面都是采用.net来做的!其他的方式应该是相同的吧首先给出要传的json数据:[{"demoData":"This Is The JSON Data"}]1,使用普通的aspx页面来处理本人觉得这种方式处理起来是最简单的了,看下面的代码吧$.ajax({type: "post",url: "Default.aspx",dataType: "json",success: function (data) {$( "input#showTime").val(data[0].demoData);},error: function (XMLHttpRequest, textStatus, errorThrown) {alert(errorThrown);}});这里是后台传递数据的代码Response.Clear();Response.Write( "[{\"demoData\":\"This Is The JSON Data\"}]");Response.Flush();Response.End();这种处理的方式将传递过来的数据直接解析为json数据,也就是说这里的前台js代码可能直接把这些数据解析成json对象数据,而并非字符串数据,如data[0].demoData,这里就直接使用了这个json对象数据2,使用webservice(asmx)来处理这种处理方式就不会将传递过来的数据当成是json对象数据,而是作为字符串来处理的,如下代码$.ajax({type: "post",url: "JqueryCSMethodForm.asmx/GetDemoData",dataType: "json", /*这句可用可不用,没有影响*/contentType: "application/json; charset=utf-8",success: function (data) {$( "input#showTime").val(eval('(' + data.d + ')')[0].demoData);//这里有两种对数据的转换方式,两处理方式的效果一样//$("input#showTime").val(eval(data.d)[0].demoData);},error: function (XMLHttpRequest, textStatus, errorThrown) {alert(errorThrown);}});下面这里为asmx的方法代码[WebMethod]public static string GetDemoData() { return"[{\"demoData\":\"This Is The JSON Data\"}]";}这里的这种处理方式就把传递回来的json数据当成了字符串来处理的,所在就要对这个数据进行eval的处理,这样才能成为真正的json对象数据,3,使用ashx文件来处理这种方式和普通的aspx的页面处理是一样的所以这里就不多做解释了!本文由淄博SEO(),淄博网站优化()整理发布,转载请注明出处。
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 不。
∙jquery的ajax和getJson跨域获取json数据目前浏览器端跨域访问常用的两种方法有两种:
1、通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的。
jsonp是英文json with
padding的缩写。
它允许在服务器端生成script tags至返回至客户端,也就是动态生成javascript标签,通过javascript callback的形式实现数据读取. html代码:
∙ 1 $(function(){ 2 3 $("#ww").click(function(){ 4 5 $.ajax({ 6 type:'get',//jquey是不支持post方式跨域的7 async:false, 8
∙url:" ",//跨域请求的URL 9 dataType:'jsonp', 10 //传递给请求处理程序,用以获得jsonp回调函数名的参数名(默认为:callback) 11
jsonp:'jsoncallback', 12 //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名13 jsonpCallback:"success_jsonpCallback", 14 //成功获取跨域服务器上的json数据后,会动态执行这个callback函数15 success:function(result){ 16 alert(result.img_url); 17 } 18 }); 19 20 }); 21 22 }); 服务器端示例代码,php代码: 1 $data['status'] = "1"; 2 $data['img_url'] = ""; 3 4 $jsoncallback = $_GET['jsoncallback']; 5 6 7 echo $jsoncallback."(".json_encode($data).")"; 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格式返回。
函数的原型如下:
∙ 1 jQuery.getJSON(url,data,success(data,status,xhr)) 参数描述url 必需。
规定将请求发送的哪个URL。
data 可选。
规定连同请求发送到服务器的数据。
success(data,status,xhr) 可选。
规定当请求成功时运行的函数。
额外的参数: response - 包含来自请求的结果数据 status - 包含请求的状态 xhr - 包含XMLHttpRequest 对象该函数是简写的ajax函数,实际上等价于:
∙ 1 $.ajax({ 2 url: url, 3 data: data, 4 success: callback, 5 dataType: json 6 });
下面我们来看如何使用getJson跨域获取数据。
∙html页面示例代码:
∙ 1 $(function(){ 2 3 $("#ww").click(function(){ 4 5 $.getJSON("", 6 function (result) { 7
alert(result.img_url); 8 } 9
∙
); 10 11 }); 12 13 }); 执行原理:发送请求时需要传一个callback的回调函数名到服务器端,服务器端拿到这个回调函数名,再将返回数据用参数的形式反回到客户端,这样客户端就能够调到。
所以发送请求URL的地址后面一定要上jsoncallback=?这样的参数,jquery会将?号自动替换成自动生成的回调函数的名称。
所以最终的实际请求为所以和ajax的方式想比较,也就是callback函数一个是自动生成的函数名,一个是手工指定的函数名。