Drupal node.save和JSONP

时间:2009-11-19 21:58:58

标签: drupal jsonp drupal-services drupal-modules

我在使用MooTool的JSONP调用Drupal node.save时出现问题。这是一个例子。

这是我的要求:

回调Request.JSONP.request_map.request_1
方法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,但我猜我需要做的就是将字符串转回一个对象。我应该关注的任何想法,或者是否有现有补丁?

1 个答案:

答案 0 :(得分:0)

第一个问题可能是你使用mootools的原因,因为Drupal附带了jQuery并且在不同的模块和Drupal核心本身中广泛使用它。

无论如何我不知道mootools所以无法帮助你,但如果你的请求以内部服务器错误结束,你的drupal代码或你的js代码有问题。所以即使我确切地知道你在做什么,如果不查看你的http://myDrupalSite.com/services/json回调的drupal代码,我也无法告诉你这个问题。

一般来说,您要确定的是:

  • 你发出一个POST请求,因为drupal会缓存get和它的语义,就是你要将数据 - 节点 - 发布到服务器。
  • 您的数据应该作为post params发送,这将使它们最终成为PHP $ _POST变量
  • 您的回调应验证数据并采取相应措施,在数据完好无损时创建节点。您不需要会话ID,因为脚本将具有与浏览器相同的会话。

我已经详细回答了类似的问题,这是关于改变字段而不是保存节点,但大部分工作仍然是相同的。您可以查看post,虽然这是使用jQuery而不是Mootools。