【问题标题】:Delete post with Blogger API使用 Blogger API 删除帖子
【发布时间】:2011-08-05 15:27:20
【问题描述】:

我正在使用 Blogger 协议 API,但在删除帖子时遇到了问题。我正在使用 webOS 设备,因此无法直接发送DELETE;相反,我使用谷歌的解决方法来使用POST

deletePostList: function(event)
{
    var deletePostID = event.item.id.split('.').pop().split('-').pop();
    var deleteRequest = new Ajax.Request("http://www.blogger.com/feeds/" + activeBlogID + "/posts/default/" + deletePostID,
    {
        method: 'post',
        requestHeaders:
        {
            Authorization: 'GoogleLogin auth=' + authCode,
            "X-HTTP-Method-Override": "DELETE",
            "If-Match": "*"
        },
        onSuccess: this.deletePostRequestSuccess.bind(this),
        onFailure: this.deletePostRequestFailure.bind(this)
    });
},

这似乎有效,即 deletePostRequestSuccess 在此过程之后被调用,并且所有标题和响应文本看起来都像我认为在删除帖子时应该的那样,但实际情况是帖子仍保留在提要中。我尝试添加“If-Match”标题以确保它不是 GData 条件删除阻止我(即使我此时没有更改帖子中的任何内容),但这似乎没有帮助。

关于如何完成这项工作的任何想法?我想坚持使用协议,因为它在 webOS 上是原生的,而 jQuery 等则不是。

【问题讨论】:

    标签: javascript prototypejs gdata-api blogger webos


    【解决方案1】:

    据我所知,您对 HTTP 方法的问题不在于 webOS,而在于 Prototype according to the source

    我建议创建一个子类:

    <script type="text/javascript"> var MyAjaxRequest = Class.create(Ajax.Request, {

    request: function(url) { this.url = url; this.method = this.options.method; var params = Object.isString(this.options.parameters) ? this.options.parameters : Object.toQueryString(this.options.parameters);

    /* comment out this stuff that prevents you from using the DELETE method

    if (!['get', 'post'].include(this.method)) {
      // simulate other verbs over post
      params += (params ? '&' : '') + "_method=" + this.method;
      this.method = 'post';
    }
    

    */

    if (params && this.method === 'get') {
      // when GET, append parameters to URL
      this.url += (this.url.include('?') ? '&' : '?') + params;
    }
    
    this.parameters = params.toQueryParams();
    
    try {
      var response = new Ajax.Response(this);
      if (this.options.onCreate) this.options.onCreate(response);
      Ajax.Responders.dispatch('onCreate', this, response);
    
      this.transport.open(this.method.toUpperCase(), this.url,
        this.options.asynchronous);
    
      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
    
      this.transport.onreadystatechange = this.onStateChange.bind(this);
      this.setRequestHeaders();
    
      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
      this.transport.send(this.body);
    
      /* Force Firefox to handle ready state 4 for synchronous requests */
      if (!this.options.asynchronous && this.transport.overrideMimeType)
        this.onStateChange();
    
    }
    catch (e) {
      this.dispatchException(e);
    }
    

    }); </script>

    这样你就可以使用method: 'DELETE'

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 2017-07-25
      • 2020-06-07
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      相关资源
      最近更新 更多