在WordPress AJAX API中使用主干

时间:2013-10-23 作者:hereswhatidid

我试图使用主干构建一个简单的TODO插件,但遇到了AJAX API的问题。为了获得正确的AJAX回调,必须像下面这样传入“action”参数:

管理ajax。php?操作=获取\\u待办事项

对于主干中的GET方法来说,它工作得很好。但是,使用DELETE主干时,默认情况下将使用如下URL:

管理ajax。php?操作=获取待办事项/9

其中,“9”是要删除的todo的ID。通过添加这个ID,它中断了WordPress端的AJAX调用。我可以手动覆盖每个方法的URL,但我想知道是否有更优雅的方法让AJAX API与主干网一起工作。

我创建了一个演示插件,它显示了我遇到的具体问题。加载设置页面并单击任意X,同时观察网络检查器以查看来自WordPress的0值AJAX结果。

https://github.com/hereswhatidid/wordpress-todo-backbone-demo

2 个回复
SO网友:Seamus Leahy

您需要覆盖Backbone.sync 函数更改用于AJAX调用的URL。您可以从插件中学习wp-backbone 这样做,甚至更多。下面,您可以从中看到它如何将所有操作更改为POSTGET, 创建参数,添加action 参数等。

(function($) {
Backbone.sync = function(method, model, options) {

    var params = _.extend({
        type:         \'POST\',
        dataType:     \'json\',
        url: wpBackboneGlobals.ajaxurl,
        contentType: \'application/x-www-form-urlencoded;charset=UTF-8\'
    }, options);

    if (method == \'read\') {
        params.type = \'GET\';
        params.data = model.id
    }

    if (!params.data && model && (method == \'create\' || method == \'update\' || method == \'delete\')) {
        params.data = JSON.stringify(model.toJSON());
    }


    if (params.type !== \'GET\') {
        params.processData = false;
    }

    params.data = $.param({action:\'backbone\',backbone_method:method,backbone_model:model.dbModel,content:params.data});

    // Make the request.
    return $.ajax(params);


};

})(jQuery);

SO网友:Mauro Colella

您不需要重写Backbone.sync 自主干。同步将覆盖其自己的$。带有作为选项传递的参数的ajax请求。查看此链接了解如何Backbone.sync 内部工程:http://backbonejs.org/docs/backbone.html#section-141

您可以在模型或集合中添加以下内容:

save: function(){
    var $params = {
        emulateJSON: true, 
        data: { 
                 action: \'your_wp_ajax_action\', 
                 payload : this.toJSON() 
              } 
        };

    //return $.post(this.url, $params, null);

    return Backbone.sync( \'create\', this, $params );
}
然后在服务器端将数据作为常规post数据进行处理(模型位于$_POST[\'payload\']).

此方法执行以下操作:

为ajax调用创建一组必要的覆盖emulateJSON param:它使前端和后端的语法更加精简。您必须使用JSON。否则,对“data”参数进行字符串化$_POST[\'payload\'] 然后包含所有主干数据的数组。

结束

相关推荐

使用json API和AJAX解析WordPress博客数据

对于如何使用json api插件从wordpress博客帖子中提取数据,我看到了很多回应。许多人使用美元。getJSON,$。AJAX响应数据。喂养条目、成功函数()等。从wordpress解析JSON API数据的正确方法是什么,将结果发布到jQuery mobile listview中的content div页面。我有以下代码,但无法获得预期结果:HTML<!DOCTYPE html> <html lang=\"en\"> <head>