我试图从jQuery处理ajax调用的响应体,但到目前为止还没有成功。
这是我的jQuery代码:
function doAjaxClosedStatus(url, requestId, closedStatusId) {
$.ajax({
type: "POST",
url : url+requestId,
data : ({
'closedStatusId' : closedStatusId
})
}).success(function(msg) {
alert(msg);
if (msg == "fail") {
alert("test");
$(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>'));
$('option:selected', '.closedStatus ').removeAttr('selected');
$('.closedStatus option:first-child').prop('selected', 'selected');
}
});
}
因此整个呼叫和服务器端处理工作就像一个魅力,并使用&#34;完成&#34;或者&#34;失败&#34;分别当一切都是对或错时(我知道你猜对了)。现在,当响应失败时,我想做一些客户端处理,但永远不会触发alert(msg)
... 我做错了什么?
编辑:我忘了说,我使用Spring MVC作为后端,而我只是回归&#34;失败&#34;为@ResponseBody
。当我检查网络流时,响应主体是&#34;失败&#34;或者&#34;完成&#34;。
EDIT2 :我试过:
$.ajax({
type: "POST",
url : url+requestId,
data : ({
'closedStatusId' : closedStatusId
}),
success:function(msg) {
alert(msg);
if (msg == "fail") {
alert("test");
$(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>'));
$('option:selected', '.closedStatus ').removeAttr('selected');
$('.closedStatus option:first-child').prop('selected', 'selected');
}
}
});
仍然没有成功......
EDIT3 : 所以我一直在尝试这个:
function doAjaxClosedStatus(url, requestId, closedStatusId) {
$.ajax({
type: "POST",
url : url+requestId,
data : ({
'closedStatusId' : closedStatusId
}),
success:function(msg) {
alert(msg);
if (msg == "fail") {
alert("test");
$(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>'));
$('option:selected', '.closedStatus ').removeAttr('selected');
$('.closedStatus option:first-child').prop('selected', 'selected');
}
}
});
}
由于某种原因,它现在确实有效。也许这是因为我的浏览器的缓存没有被清空,因此使用我的脚本的旧版本。无论如何,现在这是正常的。除了我的DOM操作,但这不属于问题本身所以主题关闭!谢谢大家!
答案 0 :(得分:2)
你不能链success
,这是$ .ajax中的一个方法,你可能会想到done()
function doAjaxClosedStatus(url, requestId, closedStatusId) {
$.ajax({
type: "POST",
url : url+requestId,
data : {closedStatusId : closedStatusId}
}).done(function(msg) {
if ( $.trim(msg) == "fail") {
alert("test");
$(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>'));
$('option:selected', '.closedStatus ').removeAttr('selected');
$('.closedStatus option:first-child').prop('selected', 'selected');
}
});
}
答案 1 :(得分:2)
var request = $.ajax({
type: "POST",
url : url+requestId,
data : ({'closedStatusId' : closedStatusId});
request.done(function(msg) {
alert("yes");
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
这对我有用
答案 2 :(得分:0)
从代码中看起来像.success函数在$ .ajax之外。
应该是这样的
$.ajax({
type: "POST",
url : url+requestId,
data : ({
'closedStatusId' : closedStatusId
}),
.success(function(data) {
alert(data);
if (data == "fail") {
alert("test");
$(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>'));
$('option:selected', '.closedStatus ').removeAttr('selected');
$('.closedStatus option:first-child').prop('selected', 'selected');
}
});
并确保您的服务器发送一些数据..如果php回显结果。
答案 3 :(得分:0)
你的代码实际上对我有用,但我有一些理论可以解释它为什么会失败。
响应的mime类型可能导致jquery将响应误解为XML(例如),然后无法解析它。你可以通过硬编码dataType
来解决这个问题。
dataType : 'text',
您正在尝试连接到其他域上的服务器,因此您收到了跨浏览器脚本错误。您可以通过在服务器上设置Access-Control-Allow-Origin
标头来解决此问题。一种方法是通过像这样的.htaccess文件。
Header set Access-Control-Allow-Origin "*"