jQuery $ .post没有返回数据

时间:2013-02-27 18:11:04

标签: javascript jquery ajax json post

我正在使用$ .post通过ajax将表单发送到PHP页面,该页面返回JSON数据。曾几何时,它工作得很好,功能(数据)正常执行。不知何故,我打破了它,现在它甚至没有触及功能(数据)。我已经尝试撤消我所做的大部分工作,但我仍然找不到问题。

这是脚本:

$("#modifyhome").submit(function(event) {
    if($("#modifyhome").valid()) {  
        event.preventDefault();

        var $form = $( this ),
            title = $form.find('input[name="title"]').val(),
            content = $form.find('textarea[name="content"]').val();

        $.post("?action=page-accueil", {"title": title, "content": content},
            function(data) {            
                if(data['error'] == 1)
                {           
                    $().message(data['message']);
                    $("div.jquery-message").effect("shake", {times: 3}, 900);
                }
                else if(data['error'] == 0)
                {           
                    $().message(data['message']);
                    $("div.jquery-message").effect("bounce", {times: 3}, 900);
                }
                else
                {           
                    $().message("Erreur de connexion au serveur : veuillez réessayer.");
                    $("div.jquery-message").effect("shake", {times: 3}, 900);
                }
            }, "json"
        );
    }
    else
    {
        $("[id^=qtip-]").effect("pulsate", {times: 3}, 600);
        return false;
    }
});

以下是PHP页面(?action = page-accueil)返回的内容:

{"error":0,"message":"Page modifiée."}

所有都检出有效的JSON,但就好像jQuery由于某种原因无法识别它。非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:0)

你不清楚问题是什么。一开始你说

  

不知怎的,我已经破坏了它,现在它甚至没有触及功能(数据)

然后你说jQuery没有识别你的JSON,这意味着调用了回调函数。您需要测试流程的每个阶段以发现错误。在这种情况下,浏览器控制台是必须进行调试的。

测试用例:

  1. 服务器返回什么?如果不是

    • php代码中是否有错误?可能会返回500错误或者可以返回OK,但错误消息为字符串。
    • 是否存在同源问题?也许正在形成HTTP - > HTTPS?
  2. 如果服务器正在返回某些内容但未正确解析它。

    • 返回的数据是否有效JSON?对于PHP,您应该使用json_encode函数(如果可用)或类似的东西。 jQuery方面有jQuery.parseJSON()
    • 响应式标头是否存在问题?在这种情况下,您将需要使用普通的$ .ajax并将beforeSend参数设置为类似beforeSend:function(xhr){xhr.setRequestHeader(“Accept”,“text / javascript”)}。您需要进一步研究此选项。
  3. 要测试任何一项,您熟悉浏览器控制台是至关重要的。 Chrome Network PanelFirebug Net Tab

答案 1 :(得分:-1)

我曾经也遇到过这个问题,我完全不确定原因。但我有一个有效的解决方案。

$.post("?action=page-accueil", 
    {"title": title, "content": content},
    function(data) {
        data = eval("("+data+")");
        //.... Then continue it
});

或者,如果您不想使用.parseJSON()

,请使用eval()函数将字符串读取为JSON
$.post("?action=page-accueil", 
    {"title": title, "content": content},
    function(data) {
        data = $.parseJSON(data);
        //.... Then continue it
});