jQuery Ajax使用心得详细整理及注意事项

 更新时间:2013年02月02日 16:58:13   投稿:whsnow  
jQuery Ajax相关文章想必大家在网上面已经看到了很多,本文主要目的是整理jQuery Ajax相关内容,感兴趣的朋友可以了解下,或许本文对你有所帮助

IE7及以下请求方式用GET的话,URL的限制是个很容易忽视的问题(最大2083个字符)。所以如果URL有可能过长的话,一定要用POST。
--------------------------------------------------------------------------------
终止Ajax请求
终止请求需要调用XMLHttpRequest对象的abort()方法
而在jQuery中的$.get,$.post、$.ajax、$.getJSON、$.getScript...的返回值都是XMLHttpRequest对象.
调用abort()后,ajax请求立即停止,但仍然会执行success的回调函数
所以在success的回调函数中需要先判断 ajaxGet 或 data是否存在,存在才执行回调函数

复制代码 代码如下:

var ajaxGet = $.get(someURL,someData,function(data){
if(!data)return true;
//TODO
});
ajaxGet.abort();

说到跨域资源共享(CORS Cross-Origin Resoure Sharing),现在正变的越来越重要。各种地图API,微博API等等,网站开发人员不必自己去放卫星,只要根据别人开放的接口,就能获取到这些数据。
这得益于跨源策略。

JSONP就是跨源策略的一种方案。基本原理就是利用浏览器允许跨域获取script资源(包括图片)的特点,在服务器端生成script Tag,并传回客户端。

要注意的是,服务器端返回的不是JSON格式的字符串,而是callbackName+"("+JSON_string+")"也就是JSONP。

这就相当于服务器把一段JS代码(被赋值的函数)返回浏览器,然后立即执行。
所以,在浏览器端发送的URL中(以GET的形式),需要把回调函数名传入。
客户端:
复制代码 代码如下:

function deal(data){
//TODO
}
var s= document.createElement("script")
//不必一定叫callback,但是一定要跟服务器端的Request.QueryString匹配
s.src = "http://172.20.2.60:8088/newwebsite/MyHandler.ashx?callback=func";
document.body.appendChild(s)

服务器端(.Net)
复制代码 代码如下:

<%@ WebHandler Language="C#" Class="Test" %>
using System;
using System.Web;
public class Test : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.Charset = "utf-8";
context.Response.ContentType = "text/javascript";
string callback = context.Request.QueryString["callback"];//回调函数名
string json = "{'name':'Ray','msg':'hello world!'}";//JSON格式的字符串
string result = string.Format("{0}({1})", callback, json);
context.Response.Write(result);
context.Response.Flush();
context.Response.End();
}
public bool IsReusable {
get {
return false;
}
}
}

用jQuery的话,URL中就不用加回调函数名了,因为jQuery已经为你代劳了,而这个回调函数就是success。
复制代码 代码如下:

$.ajax({
url: "http://172.20.2.60:8088/newwebsite/MyHandler.ashx"
, dataType: "jsonp"
, success: function(data) {
//TODO
}
});

不管怎么说你都是从别人的地盘倒腾数据,而且内容还是脚本!也就是说如果人家是个坏人,给你点恶意代码,那就不好办了。

当然这个问题一般也不会发生。毕竟咱想请求数据的地方都是咱熟悉的要么就是官方的(什么谷歌地图API,新浪微博API这些显然不会给你坑)。

另一个问题就闹心了。浏览器端对JSONP的请求是否失败是无法直接知晓的。就算用jQuery,error也不起作用。就算出错了try,catch也捕捉不到。

所以暂时知道的只有一种不完美方法,就是设定一个时限,如果超过时限还没有数据返回,那么就判定error。说不完美是因为,各家的网速是不同的,所以...你懂得。
--------------------------------------------------------------------------------
jQuery中contentType相关
jQuery官网原文
复制代码 代码如下:

contentType
Default: 'application/x-www-form-urlencoded; charset=UTF-8'
When sending data to the server, use this content type.
Default is "application/x-www-form-urlencoded; charset=UTF-8", which is fine for most cases.
If you explicitly pass in a content-type to $.ajax(),
then it'll always be sent to the server (even if no data is sent).
If no charset is specified, data will be transmitted to the server using the server's default charset;
you must decode this appropriately on the server side.

通过这段文字我们就可以知道在jQuery ajax中 contentType默认是'application/x-www-form-urlencoded; charset=UTF-8' 当然这是最新版jQuery的。相对于以前版本是有些许变化的。

如果想将一个对象序列化后传向后台,可以将contentType设置为'application/json'

相关文章

  • js与jQuery实现的兼容多浏览器Ajax请求实例

    js与jQuery实现的兼容多浏览器Ajax请求实例

    这篇文章主要介绍了js与jQuery实现的兼容多浏览器Ajax请求,以实例形式分别讲述了采用纯js与jQuery实现的兼容多浏览器Ajax请求的方法,并对Ajax中出现的乱码问题进行了一定的分析,需要的朋友可以参考下
    2014-11-11
  • Ajax读取txt并对txt内容进行分页显示功能

    Ajax读取txt并对txt内容进行分页显示功能

    这篇文章给大家介绍了Ajax读取txt并对txt内容进行分页显示功能,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • Django框架利用ajax实现批量导入数据功能

    Django框架利用ajax实现批量导入数据功能

    这篇文章主要介绍了Django框架利用ajax实现批量导入数据功能的相关资料,需要的朋友可以参考下
    2016-03-03
  • javascript Ajax获取远程url的返回判断

    javascript Ajax获取远程url的返回判断

    将以下文本放入一个HTML页面即可看到效果,将会有两次弹出提示,最后在页面上显示YES,表示完成
    2012-01-01
  • Ajax基础使用详解

    Ajax基础使用详解

    这篇文章主要介绍了Ajax基础使用详解,是前后台交互的能⼒ 也就是我们客户端给服务端发送消息的⼯具,以及接受响应的⼯具,本篇就来对ajax基础进行详细讲解,需要的朋友可以参考下
    2023-05-05
  • AJAX跨域请求之JSONP获取JSON数据

    AJAX跨域请求之JSONP获取JSON数据

    JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。
    2015-09-09
  • Ajax修改购物车示例

    Ajax修改购物车示例

    这篇文章主要介绍了Ajax修改购物车的思路及具体实现,需要的朋友可以参考下
    2014-07-07
  • 探秘ajax跨域请求

    探秘ajax跨域请求

    本文讲解的是怎么利用ajax实现跨域请求,那么知道“同源策略”,就可以解决很多疑问:“为毛我的ajax加载不了数据!”“为毛浏览器控制台会对我如此漂亮的代码报错!”这就是我们今天要主要探讨的内容了。
    2015-03-03
  • Ajax读取数据到表格的实现代码

    Ajax读取数据到表格的实现代码

    前两篇我们讲了 ajax开始的准备 与及如何使用ajax技术进行简单的数据读取.
    2010-10-10
  • AngularJS tab栏实现和mvc小案例实例详解

    AngularJS tab栏实现和mvc小案例实例详解

    这篇文章主要介绍了angularJS tab栏实现和mvc小案例,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2017-05-05

最新评论