1

ユーザーがクイズフォームに記入し、「スコアクイズ」リンクをクリックします。必要なのは、スコアを集計し、結果をjQuery ajax呼び出しを介してサーバーに送信し、ファンシーボックスにユーザー通知を表示することです。

何が起こっているのかというと、集計が行われ、ajax呼び出しが開始され、ページがリロードされます。ajax呼び出しをコメントアウトすると、fancyboxが希望どおりに表示されます。Wordpressの使用3.4.2。

何が起こっているのでしょうか?

    jQuery('#checkQuiz').click(function(){
        var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
        // tally correct answers
        var quizData = tallyScore();
        // display user notice
        jQuery('a#hiddenAnchor').trigger('click');
        // store the data while the user is reading the results display
        jQuery.ajax({
            type:"post", 
            url:ajaxurl, 
            data:quizData
        });
        return false;
    });

注1:Firebugコンソールでエラーをキャッチできました:

NS_ERROR_XPC_NOT_ENOUGH_ARGS: Not enough arguments [nsIDOMLocation.replace]

報告されたファイルはjQuery.jsであり、バージョン1.7.2のようです。jQueryの現在のリリースは1.8.1であることに気づきました。それが問題の一部なのかしら。

注2:このコードが子テーマのページテンプレートの一部であることを忘れました。Webアプリの他のページで行われた同様のajax呼び出しは正常に機能します。誰かがstackoverflowにアクセスしない場合に備えて、 Wordpress.orgトラブルシューティングフォーラムに投稿を追加しました。

注3:ワードプレス「twentyeleven」の標準テーマでこれをテストしました。同じエラーが発生しました。テストするオプションが不足しています。

4

2 に答える 2

2

試してみてください:

jQuery('#checkQuiz').click(function(e){
    var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
    // tally correct answers
    var quizData = tallyScore();
    // display user notice
    jQuery('a#hiddenAnchor').trigger('click');
    // store the data while the user is reading the results display
    jQuery.ajax({
        type:"post", 
        url:ajaxurl, 
        data:quizData
    });
    e.preventDefault()
    return false;
});

を使用e.preventDefaultすると、ページの再読み込みが停止します。

コードに2つの変更を加えたことに注意してください。eコールバック関数のパラメーターリストにe.preventDefault、その関数の最後に追加しました。

于 2012-09-18T20:49:35.183 に答える
1

関連するコードをテストして分解した後、ajax 呼び出しに渡されたデータ配列にエラーが見つかりました。同様のエラーの回答を探している人を支援するために、コードで見つけたものをここに示します。

quizData は、WordPress ajax ハンドラー用に構造化された配列です。

見つかったコード

var quizData = {
    action: 'save_quiz',
    item: invoice_item,
    lesson: jQuery("#lesson"),
    score: ratio };

このコードには 2 つの問題があります。まず、jQuery 呼び出しは、jQueryオブジェクトを配列値要素「レッスン」に割り当てています。これにより、配列内に「未定義」の値が発生し、エラー状態が発生します。ここで欠けているのは、「.val()」関数の呼び出しです。

2 つ目は、プロジェクトのコード アーキテクチャである可能性がありますが、配列アセンブリ ブロック内の jQuery 呼び出しが期待どおりに機能しないようです。私のテストでは、データ配列に空の値が含まれていました。

解像度

var lesson_id = jQuery("#lesson").val();
var quizData = {
    action: 'save_quiz',
    item: invoice_item,
    lesson: lesson_id,
    score: ratio };

これが誰かに役立つことを願っています。

于 2012-09-22T16:17:03.137 に答える