Delete post with Blogger API

非 Y 不嫁゛ 提交于 2019-12-11 12:54:35

问题


I'm using the Blogger Protocol API and I'm having trouble deleting posts. I'm working on a webOS device and so I can't send DELETE directly; instead I use Google's workaround to use 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)
    });
},

This seems to work, i.e. deletePostRequestSuccess is called after this processes and all the headers and response text look like I think they should when deleting a post, but the reality is that the post remains in the feed. I tried adding the "If-Match" header to make sure it wasn't the GData conditional delete holding me up (even though I haven't changed anything in the post at this time), but that doesn't seem to help.

Any ideas on how to make this work? I'd like to stick with Protocol since it's native on webOS, whereas jQuery, etc. is not.


回答1:


From what I can tell, your issue with the HTTP methods is not webOS, but in Prototype according to the source.

I would suggest creating a subclass:


<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>

That way you can use method: 'DELETE'



来源:https://stackoverflow.com/questions/5665418/delete-post-with-blogger-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!