关于jQuery中的$.ajax()使用过程中的一些感悟
2015-11-04 17:10
561 查看
完成了很久的一个购买页面,后台跟我讲说:购买专区上的省市与线索库的不太一致,对获取线索的准确性造成一定的问题。所以现在对应的省市项,得是后台先传数据给我,然后我在页面展示完呈现给用户。
很自然的就想到使用jsonp进行跨域的数据传输。基本想法:页面加载完之后,通过$(document).ready($.ajax())进行数据的获取,然后create新的省份项province;然后根据用户选择的省份,利用province.onchange事件来选择对应的城市项进行渲染呈现,这就是基本的思路。
于是在jQuery中的ajax里面赋值对应的url,并将dateType设置为jsonp才可以跨域。要么页面会显示请求被拒绝的错误。这里有两个参数jsonp和isonpCallBack。这两个参数别分表示:你传给后台服务器的函数参数,当后端收到这个参数的值得数据,会将请求对应的数据包裹到这个函数中,回传给浏览器客户端。默认情况下jQuery会给这两个参数默认值为callback。当调用成功之后就会触发success函数,失败的话会调用error函数。
当编号程序实际测试的时候,问题出现了,本来应该是要等数据获取到之后,才加载省份项,但是发现ajax数据还没获取完,页面展示的环节已经实现,导致页面无法按指定的思路呈现。所以决定让ajax的过程为同步,设置async:false,也就是等待ajax过程完成之后才执行下面的js代码。但是仍然有问题,效果一样。也就是后面的js代码没有等到ajax完成便执行了。
为了解决这个问你,查看jQuery之后发现,设置async:false;可以实现ajax的同步,但是对于jsonp类型不管用。因为jsonp传输的是js的函数代码而不是等待的数据,所以无法控制,它的实现不是通过XMLHttpRequest对象进行的。为了解决这个问题,只能将省份项的初始化工作放在success中执行,这样便解决了问题。
为了在选择对应省份项的时候只联动自己的城市项,所以每次都要清除一下cities项中的城市选项。本来使用的是removeChild一个节点一个节点的删除,能够实现此功能。后来灵机一动,可以使用length属性来删除所有的子节点项。主要将length属性设置为0即可。
关于新的实现方法这样就可以解决问题了。
很自然的就想到使用jsonp进行跨域的数据传输。基本想法:页面加载完之后,通过$(document).ready($.ajax())进行数据的获取,然后create新的省份项province;然后根据用户选择的省份,利用province.onchange事件来选择对应的城市项进行渲染呈现,这就是基本的思路。
于是在jQuery中的ajax里面赋值对应的url,并将dateType设置为jsonp才可以跨域。要么页面会显示请求被拒绝的错误。这里有两个参数jsonp和isonpCallBack。这两个参数别分表示:你传给后台服务器的函数参数,当后端收到这个参数的值得数据,会将请求对应的数据包裹到这个函数中,回传给浏览器客户端。默认情况下jQuery会给这两个参数默认值为callback。当调用成功之后就会触发success函数,失败的话会调用error函数。
当编号程序实际测试的时候,问题出现了,本来应该是要等数据获取到之后,才加载省份项,但是发现ajax数据还没获取完,页面展示的环节已经实现,导致页面无法按指定的思路呈现。所以决定让ajax的过程为同步,设置async:false,也就是等待ajax过程完成之后才执行下面的js代码。但是仍然有问题,效果一样。也就是后面的js代码没有等到ajax完成便执行了。
为了解决这个问你,查看jQuery之后发现,设置async:false;可以实现ajax的同步,但是对于jsonp类型不管用。因为jsonp传输的是js的函数代码而不是等待的数据,所以无法控制,它的实现不是通过XMLHttpRequest对象进行的。为了解决这个问题,只能将省份项的初始化工作放在success中执行,这样便解决了问题。
为了在选择对应省份项的时候只联动自己的城市项,所以每次都要清除一下cities项中的城市选项。本来使用的是removeChild一个节点一个节点的删除,能够实现此功能。后来灵机一动,可以使用length属性来删除所有的子节点项。主要将length属性设置为0即可。
关于新的实现方法这样就可以解决问题了。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- JavaScript演示排序算法
- 2015-2016网页设计趋势分析 Web Design of Trends
- jQuery Ajax 跨域调用
- 移动端的长按事件
- jquery教程靠边站,一分钱不花让你免费学会jquery
- JQuery+Strusts1.x无刷新登录
- 解决Ajax悬停效果,无法遮蔽FLASH的问题
- 再谈Jquery Ajax方法传递到action(补充)
- jQuery菜单插件用法实例
- JQuery 初体验(建议学习jquery)
- Jquery实现的table最后一行添加样式的代码
- jQuery实现向下滑出的平滑下拉菜单效果
- jQuery 练习[一] 学习jquery的准备工作
- jquery获得页面元素的坐标值实现思路及代码
- 使用Browserify配合jQuery进行编程的超级指南
- jquery如何实现在加载完iframe的内容后再进行操作
- jquery $.ajax()取xml数据的小问题解决方法
- jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
- Jquery 表单取值赋值的一些基本操作