0

$.post を使用して、JSON データを返す PHP ページに ajax 経由でフォームを送信しています。むかしむかし、それは完全に機能し、関数(データ)は通常どおり実行されました。どういうわけか、私はそれを壊しました、そして今では関数(データ)にも触れていません。行ったことのほとんどを元に戻そうとしましたが、まだ問題が見つかりません。

スクリプトは次のとおりです。

$("#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 Net タブ

于 2013-02-27T19:29:16.773 に答える
-1

私もこの問題を抱えていましたが、その理由はよくわかりません。しかし、私にはうまくいく解決策があります。

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

または、使用.parseJSON()したくない場合は、関数を使用して文字列をJSONとして読み取りますeval()

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