Jquery并不总是显示Json Response

时间:2015-07-15 02:31:52

标签: jquery json

。 。 。 。

我面临的问题是以下代码:
$("#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,直到我刷新页面

3 个答案:

答案 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);
}

然后,您至少可以更好地了解正在发生的事情。

祝你好运!