0

Drupal で ajax 経由でノード フォームを受信しようとしています。

通常は、json データを適切に表示するトリガー ボタンを作成する必要がありました。私はテストのためにそれを行いましたが、以下のphpコードで非常にうまく機能しました.

しかし、私が必要としているのは、JavaScript を使用してカスタム ahah トリガー リンクを動的に作成することです。そして、これらのカスタム リンクは、あははボタンのように機能し、ノード フォームを表示するコールバック関数を呼び出します。

サーバー側では、json データを送信するコールバック関数は次のとおりです。

function get_lesson_form($nid) {
    global $user;  

    $node = array('uid' => $user->uid, 'name' => $user->name, 'type' => 'lesson');
    $form_id = 'lesson_node_form';

    // Initialize settings:
    $file = drupal_get_path('module', 'node') . '/node.pages.inc';
    include_once './' . $file;

    $rendered_form = drupal_get_form($form_id,$node);
    $javascript = drupal_add_js(NULL, NULL);

    drupal_json(array(
        'status'   => TRUE,
        'data'     => $rendered_form,
        'settings' => call_user_func_array('array_merge_recursive',$javascript['setting']),
        )
    );
}

Drupal の ahah.js が json コンテンツの取得と表示をどのように処理するかを少し調べて、単純に json データを取得して追加する以下の ajax 呼び出しを作成しました。

$.ajax({
    url : '/fcrp_form/nid',
    success : function(response) {
        console.log(response);

        var form = Drupal.parseJson(response);
        var target_wrapper = $('#event-edit-container');
        var new_content = $('<div></div>').html(form);

        target_wrapper.empty().append(new_content);
        Drupal.attachBehaviors($('#event-edit-container'));
    },
    error : function(response, error) {           
        console.log(response);
        console.log('Error: '+ error);
    },
    type: 'POST',
    dataType: 'json',
});

問題は、常にparseerrorメッセージを受け取り、応答オブジェクトが混乱していることです。json データを正常に取り込むことができず、このエラーがどのように発生したのかわかりません。

注意: これは、$data に html コードがある場合に発生します。プレーン テキストの場合、エラーは返されません。

また、通常のあはボタン(Drupalのやり方)でテストしたときは、jqueryのバージョンは1.3.2でしたが、私の場合は1.7.2のバージョンを使用しています。

どんな助けでも本当に感謝しています。

4

2 に答える 2

0

drupal_json_output ではなく drupal_json を呼び出しているとすれば、Drupal 6 でこれを実行しようとしていますか?

Drupal 7 の AJAX/AHAH フレームワークを使用すると、作業がはるかに簡単になります。

于 2012-08-11T08:28:49.887 に答える
0

返事遅れてすみません。はい、Drupal 6 を使用しました。

最終的に、問題は jQuery のバージョンの違いにあることが判明しました。それで私は使用jQuery.noConflict()しましたが、すべてがうまくいくように見えました。

于 2012-08-20T21:27:58.643 に答える