今天遇到的一个ajax的dataType问题,请求成功时后台返回了一个字符串“true”,前台接收判断条件不成功。js代码如下:
跟踪结果后台返回了“true”后,js弹出的框一直是提示 邮件发送失败! 的信息,在前台JS中加入 alert(data);弹出的结果确认是“true”,一直认为方法有问题,检查对比其他测试成功过方法,发现并没有错误。开始怀疑是 data 的接收类型有问题,百度了一下,说如果没有设置dataType,默认的类型就是 text,接收字符串直接判断显示是没有问题,但奇怪我写的这个方法为什么不行呢? 查看代码,在这步之前还有一个ajax的请求,js如下:
friendPay()函数执行后弹出框之后点击弹出框中的按钮执行sendReplacePayUrl(),猜想是不是因为之前执行friendPay()时设置了dataType : "json"的原因,导致之后执行sendReplacePayUrl()没有设置dataType,返回的数据类型默认之前设置的dataType : "json"。为了验证这点,把friendPay()中dataType : "json",去除,sendReplacePayUrl()不变,重新执行后,sendReplacePayUrl()接收data判断正常;之后再验证,将friendPay()中dataType : "json"再加上,在sendReplacePayUrl()中加上dataType : "text",重新执行后,sendReplacePayUrl()接收data判断正常。
通过上面的验证,个人得出的结论, [color=red]jquery 1.4中ajax的dataType如果没有设置,默认返回的data 就是text类型,注意前提是,在这ajax之前上一步执行的ajax方法中datatype也必须是默认的或是设置为 text, 若上一步执行的ajax的dataType不是text,则之后想要返回的data与上一步不同的类型,则需要在方法中添加相应的dataType[/color].
function sendReplacePayUrl(){
var friendMail = $('#friendMail').val();
var leaveMessage = $('#leaveMessage').val();
$.ajax( {
type : "POST",
url : basePath+"/**/**/****.sc",
data : {
"friendMail": friendMail,
"leaveMessage": leaveMessage
},
success : function(data) {
if(data=="true"){
alert("邮件发送成功!");
}else{
alert("邮件发送失败!");
}
}
});
}
跟踪结果后台返回了“true”后,js弹出的框一直是提示 邮件发送失败! 的信息,在前台JS中加入 alert(data);弹出的结果确认是“true”,一直认为方法有问题,检查对比其他测试成功过方法,发现并没有错误。开始怀疑是 data 的接收类型有问题,百度了一下,说如果没有设置dataType,默认的类型就是 text,接收字符串直接判断显示是没有问题,但奇怪我写的这个方法为什么不行呢? 查看代码,在这步之前还有一个ajax的请求,js如下:
function friendPay(){
var id = $('#combineId').val();
var payurl = '获取地址失败';
$.ajax( {
type : "POST",
url : basePath+"/**/**/****.sc",
data : {
"combineId": id
},
dataType : "json",
success : function(data) {
payurl =data.payUrl
//省略
...
}
});
}
friendPay()函数执行后弹出框之后点击弹出框中的按钮执行sendReplacePayUrl(),猜想是不是因为之前执行friendPay()时设置了dataType : "json"的原因,导致之后执行sendReplacePayUrl()没有设置dataType,返回的数据类型默认之前设置的dataType : "json"。为了验证这点,把friendPay()中dataType : "json",去除,sendReplacePayUrl()不变,重新执行后,sendReplacePayUrl()接收data判断正常;之后再验证,将friendPay()中dataType : "json"再加上,在sendReplacePayUrl()中加上dataType : "text",重新执行后,sendReplacePayUrl()接收data判断正常。
通过上面的验证,个人得出的结论, [color=red]jquery 1.4中ajax的dataType如果没有设置,默认返回的data 就是text类型,注意前提是,在这ajax之前上一步执行的ajax方法中datatype也必须是默认的或是设置为 text, 若上一步执行的ajax的dataType不是text,则之后想要返回的data与上一步不同的类型,则需要在方法中添加相应的dataType[/color].