URL对象 ajax(object)
描述:
这是一个Ajax调用的基础方法. 程序根据传入的object参数所拥有的属性进行相应的AJAX请求.
参数:

object 为一个对象类型的参数,此对象可选属性字段如下表:

注意:下表中的函数:beforeSend, complete, success, error的内部对象"this"均指向当前的URL对象。

属性 类型 说明
method String "POST"或"GET"(不区分大小写),指定发送AJAX请求的方法类型。
  对于GET请求,提交的所有数据变量都将以"名称=值&名称=值"的形式附加到URL地址后面进行发送;
  对于POST请求,除通过JSer对象.url(url)构造方法传入的数据变量仍然附加到URL地址后面以外,其它调用set或sel等方法设置进来的数据变量,都将以POST方式发送(注意:如果调用set或sel等方法所设置的变量名在构造方法传入的地址中已经存在,即程序只是修改了这个变量,它将仍然附加在URL地址中进行发送)。
  如果不指此参数,程序将根据构造方法和相关SET方法传入的参数进行自动选择,选择方式是:如果此URL对象除了JSer对象.url(url)构造方法传进来的那些参数变量名称序列之外,用户没有再另外SET其它数据变量,那么将以GET方式发送请求,否则如果还SET了其它名称的参数变量,则以POST方式发送请求。
(请见本页下面的示例2)
如果服务器支持,除POST或GET以外的其它类型的请求也是可以的。
type String 请求返回的数据类型,可取值(不区分大小写):
"html": 指示返回数据类型为HTML字符串(默认值)。
"xml" : 指示返回数据类型为一个XML文档。
"json": 指示返回的数据类型为一个JSON 脚本对象。
"script": 指示返回的数据类型为一个js脚本,该脚本将被执行。
async  boolean 指示是否以异步的方式调用AJAX(默认为true,代表异步请求)。
  当指定为同步请求时,回调函数没有意义(如果指定了回调函数,该函数不会执行)。如果同步请求时指定了参数type值为"script",在返回xmlHttp对象之前,请求响应的结果字符串会当作脚本代码先被执行。
  强烈建议不要采用同步方式,因为在同步请求的过程中,如服务器响应太慢,将会造成浏览器窗口卡死,直到同步请求结束。这绝对不是一个良好的用户体验。
cache boolean 指示是否缓存数据(默认为true)。
一般情况下,请求总能够被发送出去,但浏览器有可能从它的缓存中调取数据。通过设置此属性值为false,来禁用浏览器缓存,以使每次的请求都从服务器上读取。
ifModified boolean 指示是否仅在服务器端内容变更时获取数据(默认为false)。
程序将检查Last-Modified和Etag头信息,确定服务器端内容是否被修改过.
对于需要频繁访问或有大量数据传输的AJAX请求,通过设置此属性值为true, 并在回调函数(见此表格下面的success, error, complete三个回调函数)中检查state参数的值,仅在服务器变更时获取和处理数据,将极大节省数据传输量,加快请求响应时间.
timeout  int 一个大于或等于0的整数,用于指定请求超时时间,(默认值)为0表示不指定超时时间.
当请求超时后,程序将中止该AJAX请求,并执行error回调函数(状态state="timeout").
enctype String 指定发送至服务器的编码类型,默认值"application/x-www-form-urlencoded"适用大多数情况。
username String 如果URL地址资源需要用户名/密码认证,此参数用于指定认证用户名。
password String 如果URL地址资源需要用户名/密码认证,此参数用于指定认证密码。
send Any 自定义要发送给服务器端的数据。如果指定了此参数,在此之前set的数据都将附加到URL地址后面,XMLHttpRequest将只send此处指定的数据内容。例如,需要发送一个XML文档给服务器,而不是传统的POST字符串,您可以在此指定要发送的XML Document对象。
beforeSend function(xhr) 在发送请求之前调用此函数,此函数接受一个参数xhr,该参数是对XMLHttpRequest对象的引用。您可以在请求发送之前修改XMLHttpRequest对象,例如添加自定义的HTTP头。
如果此函数明确地返回false,将取消此AJAX请求。
success function(d,state) 回调函数: 当(异步)请求成功时调用此函数。
此函数接收两个参数,第一个参数d代表请求返回的数据(数据类型由"type"所指定);第二个参数state为请求响应结果的字符串状态(可能返回的字符串状态见下表)。
error function(xhr,state) 回调函数: 当(异步)请求失败时调用此函数。
此函数接收两个参数,第一个参数xhr是对XMLHttpRequest对象的引用,第二个参数state为请求响应结果的字符串状态(可能返回的字符串状态见下表)。
complete function(xhr,state) 回调函数: 当(异步)请求完成时调用此函数。无论请求成功还是失败,此函数都将被调用。
此函数接收两个参数,第一个参数xhr是对XMLHttpRequest对象的引用,第二个参数state为请求响应结果的字符串状态(可能返回的字符串状态见下表)。
state状态值 

下表列出了AJAX回调函数(complete, success, error)中的state参数,可能返回的字符串状态.
其中"出现位置"指: 该状态值只会出现在在指定的回调函数中.

状态值(字符串) 出现位置 说明
success success, complete AJAX请求成功,并且正常返回了服务器端的数据内容.
notmodified success, complete AJAX请求成功,但由于服务器端数据内容没有更改,本次仅返回了响应头内容,无返回数据.
error error, complete AJAX请求失败,服务器端发生错误. 您可以通过xhr.status获取服务器端返回的错误状态码.
timeout error, complete AJAX请求操时.(操时时间由上表的timeout属性定义.)
parsererror error, complete AJAX请求返回的不是一个正确的XML文档.
当设置type="xml",且返回的数据不是一个有效的XML文档时,将出现此状态信息.
返回:
对于异步操作(async=true)时,没有返回值;
对于同步操作,将始终返回发送请求的XmlHttpRequest对象本身(可以通过xmlHttpRequest对象的responseText属性,获取响应结果字符串)。同时,如果在发送请求时指定了参数type的值为"script",在返回之前,同步请求响应的结果字符串会当作脚本先被执行。
示例1:
描述:
加载并执行一个JS文件。
js代码:
JSer.url("test.js").ajax({
    type:"script"
})
;
示例2:
描述:
  特别注意下面代码中四个数据变量传递方式的区别:Actadd仍跟在url地址后面进行发送(Act=save&add=2);而后面的set方法所设置的两个数据变量nameage将以POST的方式发送!
  这是因为JSer规定(见本页上面的参数表中的method参数说明):当以POST发送请求时,除通过JSer对象.url(url)构造方法传进来的那些数据变量之外(例如这儿的Act和add),其它通过调用set或sel进来的变量都将以POST的方式发送.
  虽然代码中也调用set方法设置了一个add=2的数据变量,但它并没有以POST方式发送,因为它在构造方法传入的地址中已经存在,此时set方法做的事情仅仅是修改了构造方法中的add变量的值。
  另外值得向大家提一下,在这种情况下,由于“除通过构造方法传入的数据变量之外,还通过set方法设置了其它的数据变量(即这里的name, age)”条件成立,因此,即使不指定method参数,程序也将以POST方式发送(即可以省略掉method)。而省掉method后,剩下的就只有一个success了,而这又可以使用URL对象的ajax(callback)方法来替代,使代码更加简洁。
js代码:
JSer.url("action.do?Act=save&add=1").set({name:'张三', age:18})).set("add", 2).ajax({
    method:"post",
    success:function(d){
        alert("return data:" + d);
    }
})
;
示例3:
描述:
保存数据到数据库,成功后显示结果信息。
js代码:
JSer.url("save.do").sel(":input").ajax({
    method:"post",
    success:function(d){
        alert("return data:" + d);
    }
})
;
示例4:
描述:
仅在服务器端数据发生更改时载入数据。
js代码:
JSer.url("list.do?cid=3").ajax({
    ifModified:true,
    success:function(d, state){
        if(state=='success'){
            JSer("#infoDIV").html(d);
        }
else{
            // state value is "notmodified", nothing todo.
        }

    }
})
;
示例5:
描述:
同步方式请求数据。发送请求时将锁住浏览器。在需要锁定用户交互操作时,采用同步操作。
js代码:
var html = JSer.url("test.do").ajax({
    async:false
}).responseText
;
示例6:
描述:
探测服务器的类型。只需要发送一个HEAD请求即可(HEAD请求只会返回响应头部信息,不会发送消息主体)。
js代码:
JSer.url("test.html").ajax({
    method:"head",
    complete: function(xhr){
        alert(xhr.getResponseHeader("Server"));
    }
})
;
示例7:
描述:
向服务器发送一个XML文档内容。
js代码:
JSer.url("saveXml.Servlet").ajax({
    method:"POST",
   
//send参数,指定为XML字符串或XMLDocument对象均可。
    send: '<?xml version="1.0" encoding="utf-8"?><root><content>only a test</content></root>',
    success: function(d){
        alert(d);
    }
})
;
我们以Java Servlet为例,说明服务器端接收XML的示例代码:
Java Servlet代码片段:
import java.io.*;

//...... Servlet doPost相关代码略去

BufferedReader in = request.getReader();
String line;
String realPath = request.getServletContext().getRealPath("/saved-data.txt");

File f = new File(realPath);
FileWriter fw = new FileWriter(realPath);
BufferedWriter bw = new BufferedWriter(fw);
try {
    while ((line = in.readLine()) != null) {
       out.println(line);
       bw.write(line);
       bw.newLine();
    }
    bw.close();
    fw.close();
    out.print("saved data ok!");
} catch (Exception e) {
    e.printStackTrace();
    out.println("Mission Completed");
}
请参考:
ajax(callback), loadTo(content), JSer对象.loadUrl(url)