jquery的ajax遇到的问题

来源:互联网 发布:淘宝团扇 编辑:程序博客网 时间:2024/05/17 09:39

关于datatype的问题

前台的代码:

$.ajax({    async : false,    cache : false,      type: 'POST',      dataType : "String",    url:'<%=path%>/costmanageController/save.do',      data:{ mount : _a,                  date : _b,                },          error: function(XMLHttpRequest, textStatus, errorThrown) {                        alert(XMLHttpRequest.status);                        alert(XMLHttpRequest.readyState);                        alert(textStatus);                    },     success:function(data){ //请求成功后处理函数。 if(data=="ok"){                   $.messager.alert('注意', '记账成功', 'info');                 }    }  });

后台代码:

String pay_mount =request.getParameter("mount");        String time = request.getParameter("date");        paymentsDayBean bean = new paymentsDayBean();        bean.setPay_mount(Double.parseDouble(pay_mount));        bean.setTime(time);        pdd.AddPayments(bean);        PrintWriter writer = response.getWriter();        writer.write("ok");          writer.flush();          writer.close();

问题描述:
后台返回的数值前台总是接不到,而且总是走到error的函数里面。

解决步骤:
首先通过xmlhttprequest对象打印错误,就是把error函数,修改成下面的方式

error: function(XMLHttpRequest, textStatus, errorThrown) {                        alert(XMLHttpRequest.status);                        alert(XMLHttpRequest.readyState);                        alert(textStatus);                    },

出现的结果是 200 4 parsererror
就是XMLHttpRequest.status返回200表示正常返回,没问题XMLHttpRequest.readyState返回4 表示数据解析完成,没问题
而XMLHttpRequest.readyState返回parsererror 表示数据格式不对。此时,检查代码,发现前台代码中dataType : "String",有问题,所以改为dataType : "text",就可以了。

反思问题:对XMLHttpRequest对象的属性不了解
一:datatype
datatype有下面几种类型
•”xml”: 返回 XML 文档,可用 jQuery 处理。
•”html”: 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
•”script”: 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 “cache” 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
•”json”: 返回 JSON 数据 。
•”jsonp”: JSONP 格式。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
•”text”: 返回纯文本字符串
除此之外的类型都是非法的类型。

二:textStatus
HTTP响应的状态代码对应的文本(OK, not found),关于这部分可以参考各类 HTTP 返回状态代码详解

textStatus有四种值: “timeout”, “error”, “notmodified” 和 “parsererror”。
在使用时要注意
data:”{}”, data为空也一定要传”{}”;不然返回的是xml格式的。并提示parsererror.
parsererror的异常和Header 类型也有关系。及编码header(‘Content-type: text/html; charset=utf8’);
parsererror的异常和datatype也有关,本例就是犯了这个错误。

三:readyState
关于readystate五个状态总结如下:
readyState 状态 状态说明
(0)未初始化
此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备。值为0表示对象已经存在,否则浏览器会报错--对象不存在。
(1)载入
此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,url,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。
(2)载入完成
此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。
(3)交互
此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。
(4)完成
此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。
概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段:
创建-初始化请求-发送请求-接收数据-解析数据-完成


本文中的问题也可以参照一下博客得到解决:ajax error status状态说明

0 0