使用 Blogger API 删除帖子

发布于 2024-11-01 03:53:00 字数 979 浏览 1 评论 0原文

我正在使用 Blogger Protocol API,但在删除帖子时遇到问题。我正在使用 webOS 设备,因此无法直接发送 DELETE;相反,我使用 Google 的解决方法来使用 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 条件删除阻碍我(即使我此时没有更改帖子中的任何内容),但这似乎没有帮助。

关于如何实现这项工作有什么想法吗?我想坚持使用 Protocol,因为它是 webOS 上原生的,而 jQuery 等则不是。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ˇ宁静的妩媚 2024-11-08 03:53:00

据我所知,您的 HTTP 方法问题不是 webOS,而是 Prototype 根据来源

我建议创建一个子类:


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

请求:函数(网址){ 这个.url = url; this.method = this.options.method; var params = Object.isString(this.options.parameters) ? this.options.parameters : Object.toQueryString(this.options.parameters);

/* 注释掉这些阻止你使用 DELETE 方法的东西

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);
}

});

这样你就可以使用方法:'DELETE'

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'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文