0

我正在使用 $.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 出于某种原因无法识别它一样。任何帮助是极大的赞赏 :)

4

2 回答 2

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") }。您将需要进一步研究此选项。

要测试其中任何一个,您必须熟悉浏览器控制台。Chrome 网络面板Firebug 网络选项卡

于 2013-02-27T19:29:16.773 回答
-1

我以前也遇到过这个问题,具体原因我也不清楚。但我有一个可行的解决方案。

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

或者,.parseJSON()如果您不想使用,请使用函数将字符串读取为 JSONeval()

$.post("?action=page-accueil", 
    {"title": title, "content": content},
    function(data) {
        data = $.parseJSON(data);
        //.... Then continue it
});
于 2013-02-27T18:21:09.387 回答