您的位置:首页 > Web前端 > JQuery

jquery的ajax遇到的问题

2015-11-29 17:55 561 查看
关于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状态说明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: