1

MooTool の JSONP を使用した Drupal node.save の呼び出しに問題があります。ここに例があります。

ここに私の要求があります:

callback Request.JSONP.request_map.request_1
method node.save
sessid 123123123123123
node {"type":"blog","title":"New Title","body":"これはブログ本文です"}

これが私の結果です

HTTP/1.0 500 内部サーバー エラー

以前はこれが機能していましたが、AMFPHP を使用して、オブジェクトを drupal に送信できました。これは Drupal がオブジェクトを期待していることに関係していると思いますが、これは GET であるため、文字列として変換されます。コードをハッキングせずにこれを回避する方法はありますか?

これが私のコードです:

$('newBlogSubmit').addEvent('click', function()
{
    var node = {
        type : "blog",
        title:"New Title",
        body :"This is the blog body"
    }

    var string = JSON.encode(node);
    string.escapeRegExp()

    var sessID = _sessID;

    DrupalService.getInstance().node_save(string, sessID, drupal_handleBlogSubmit);
});

私の Drupal サービス JS コード:

//NODE
DrupalService.prototype.node_save = function(node, sessid, callback){
    var dataObj = {
        method : "node.save",
        sessid : sessid,
        node : node
    }
    DrupalService.getInstance().request(dataObj, callback);
}


//SEND REQUEST AND CALLBACK FUNCTION

DrupalService.prototype.request = function(dataObject, callback){
    new JsonP('http://myDrupalSite.com/services/json', {data: dataObject,onComplete: callback}).request();
}

私はドットを接続しようとしていますが、Drupal にはあまり慣れていませんが、文字列をオブジェクトに戻すだけでよいと思います。私が見るべき場所、または既存のパッチがあるかどうかについてのアイデアはありますか?

4

1 に答える 1

0

最初の質問は、Drupal には jQuery が付属しており、さまざまなモジュールや Drupal コア自体全体で広く使用されているため、なぜ mootools を使用するのかということです。

とにかく、私はmootoolsを知らないので、あなたを助けることはできませんが、リクエストが内部サーバーエラーで終わる場合は、drupalコードまたはjsコードに問題があります. したがって、あなたが何をしているのかを正確に知っていたとしても、http://myDrupalSite.com/services/jsonコールバックの drupal コードを見ずに問題を伝えることはできませんでした。

一般的に、確認したいことは次のとおりです。

  • drupal は get をキャッシュするため、POST 要求を行います。これのセマンティックは、データ (ノード) をサーバーにポストするということです。
  • データは投稿パラメーターとして送信する必要があります。これにより、最終的に PHP $_POST 変数になります。
  • コールバックはデータを検証し、それに応じて動作し、データが無傷のときにノードを作成する必要があります。スクリプトはブラウザと同じセッションを持つため、セッション ID は必要ありません。

ノードを保存する代わりにフィールドを変更するという同様の質問に詳しく答えましたが、作業の多くは同じです。投稿を見ることができますが、これは Mootools ではなく jQuery によるものです。

于 2009-11-20T10:25:09.230 に答える