2009-11-19 53 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。