2009-11-19 52 views
1

我遇到了使用MooTool的JSONP調用Drupal node.save的問題。這是一個例子。Drupal node.save和JSONP

這裏是我的要求:

回調Request.JSONP.request_map.request_1
方法node.save
sessid 123123123123123
節點{ 「類型」: 「博客」, 「稱號」:「新標題」, 「體」: 「這是博客的身體」}

這裏是我的結果

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的,但我估計所有的I需要做的是將字符串變成一個對象。任何想法,我應該看看,或者如果有一個現有的補丁?

回答

0

第一個問題可能是你爲什麼使用mootools,因爲Drupal附帶了jQuery,並在整個不同的模塊和Drupal核心本身中廣泛使用它。

反正我不知道mootools所以不能幫助你,但如果你的請求以內部服務器錯誤結束,你的drupal代碼或你的js代碼有問題。所以,即使我確切地知道你在做什麼,我也不會在沒有查看用於http://myDrupalSite.com/services/json回調的drupal代碼的情況下告訴你問題。

在一般情況下,你想知道什麼是:

  • 你做一個POST請求,如Drupal將緩存得到的和語義的這個,是您發佈的數據 - 節點 - 到服務器。
  • 您的數據應該以post params的形式發送,這會使它們以PHP $ _POST變量結尾
  • 您的回調應驗證數據並採取相應措施,在數據完好時創建節點。您不需要會話ID,因爲該腳本將具有瀏覽器具有的相同會話。

我已經回答了一個類似的問題,詳細介紹了改變字段而不是保存節點,但大部分工作仍然是一樣的。你可以看看post,雖然這是用jQuery而不是Mootools。