。 。 。 。
我面临的问题是以下代码:$("#message").html(output);
行并不总是显示消息,我在firebug控制台中检查json响应,我总是收到正确的响应。但有时它表明,有时却没有。我真的无法弄清楚问题是什么
这是代码
<form action="" method="post" id="auction_form">
它有两个按钮
<input type="submit" id="add_auction" class="btn btn-success" value="Add Auction">
<input type="submit" id="update_auction" class="btn btn-success" value="Update Auction">
默认情况下,通过jquery隐藏更新竞价。用户尝试编辑时按钮切换
以下是其点击事件的代码
$(":submit").click(function(e) {
action = $(this).val();
$(".text-danger").remove();
data = $("#auction_form").serializeArray();
switch(action)
{
case "Add Auction":
url = "<?php echo(base_url()); ?>admin/auctions/auction_add/";
break;
case "Update Auction":
url = "<?php echo(base_url()); ?>admin/auctions/auction_update/";
break;
}
$.post(
url,
data,
function(response){
process_ajax_response(response);
}
);
e.preventDefault();
});
和process_ajax_response函数
function process_ajax_response(response){
error = false;
result = $.parseJSON(response);
if(result.hasOwnProperty('success')){
output = "<span class='text-success bg-info'>" + result['success'] + "</span>";
//alert("success - " + output);
}
else if(result.hasOwnProperty('error')){
//alert("ss");
error = true;
output = "<span class='text-danger bg-info'>" + result['error'] + "</span>";
if(result.hasOwnProperty('errors')){
//works in case of update
output = "";
$("#auction_name").after(result['errors']['auction_name']);
$("#short_name").after(result['errors']['short_name']);
$("#code").after(result['errors']['code']);
$("#country").after(result['errors']['country']);
$("#auction_date").next().after(result['errors']['auction_date']);
$("#status").next().after(result['errors']['status']);
}
}
//alert("SS - " + output);
$("#message").html(output);
setTimeout(function(){
$("#message").fadeOut(1000);
if(!error){
window.location.href = current_url;
}
}, 1000);
}
编辑: 好的,我已经能够跟踪某些事情了。当我通过json响应得到一个错误消息时,我只是显示它并正确显示,然后再显示msg,直到我刷新页面
答案 0 :(得分:1)
添加错误处理程序并查看错误
$.ajax({
type: "POST",
url: url,
data: data,
success: process_ajax_response,
error : function () {
console.log("ERROR", arguments);
}//,
//dataType: dataType
});
此外,不需要解析对JSON的响应,正确设置dataType,jQuery将为您完成。
答案 1 :(得分:0)
如果您要查看POST并通过AJAX接收JSON数据,则应将contentType和dataType添加到AJAX调用中。
contentType: "application/json",
datatype : "application/json",
由于你没有设置contentType,你应该POST默认的application/x-www-form-urlencoded; charset=UTF-8
,因为我没有看到你传递的网址上调用的代码,我不能说你需要哪种格式,但如果你想要你的后端接收JSON,你应该设置contentType!现在看来,你既没有发布JSON,也没有正确地将数据转换为JSON。
为确保发送的数据格式正确,我建议添加JSON.stringify
。
tempD = $("#auction_form").serializeArray();
data: JSON.stringify(tempD),
答案 2 :(得分:0)
间歇性问题是最大的麻烦。
查看您的代码,我发现您没有处理您正在进行的测试的最终“ELSE”。
我建议将变量error,result和output设置为局部变量,例如:
var error, result, output = 'Uh oh';
你这样做的方式,它们是窗口对象上的全局变量,通常不受欢迎。
您执行“if success”后跟“else if error”,但如果有第三种可能性,您没有最终的“else”。也许您的数据可以保证为一个或另一个。根据我的经验,它总是最好提供最终的ELSE。
通过为输出指定默认值'uh oh',您至少会知道何时/是否遇到过第三种可能性。
您还可以提供最终的其他内容,例如:
else
{ output = 'Reached an unexpected point!<br/>' + JSON.stringify(result);
}
然后,您至少可以更好地了解正在发生的事情。
祝你好运!