具有定制REST端点的主干

时间:2020-02-07 作者:dsj

我已经创建了一个自定义端点,它返回select用户元数据。我正在尝试使用主干访问此端点。如果我的访问检查被模拟出来,它在Postman和我的主干/javascript脚本中都能正常工作。

var app2 ={};

app2.Pilot = Backbone.Model.extend({    
    url: POST_SUBMITTER.root + \'pilotdata/v1/pilot/\'
 });

 app2.pilot = new app2.Pilot();

 app2.pilot.fetch(
   {data: ({ id: 1 })}
 ).then(function(){
    console.log(app2.pilot)
})      
当然不能让数据赤裸裸地挂在外面。因此,我实施了访问检查,并按预期返回了未经授权的状态。因为没有返回nonce。但是如何设置nonce呢?从…起theAverageDev 我能想出:

    var app2 ={};

    app2.Pilot = Backbone.Model.extend({    
    url: POST_SUBMITTER.root + \'pilotdata/v1/pilot/\',
    sync: function(){
        Backbone.sync(\'create\', this,{
            beforeSend: function (xhr) {
                xhr.setRequestHeader(\'X-WP-NONCE\', POST_SUBMITTER.nonce );
            },
        });
    },
 });

 app2.pilot = new app2.Pilot();

 app2.pilot.fetch(
   {data: ({ id: 1 })}
 ).then(function(){
    console.log(app2.pilot)
})      
我承认我不完全理解这是在做什么。是否覆盖同步?但是当我这样做的时候

TypeError: undefined is not an object (evaluating \'app2.pilot.fetch( {data: ({ id: 1 })}

是否覆盖同步未定义的获取?使用主干网传递nonce的最佳方式是什么?

我想我明白了:

var app2 ={};

app2.Pilot = Backbone.Model.extend({    
    url: POST_SUBMITTER.root + \'pilotdata/v1/pilot/\',
 });

 app2.pilot = new app2.Pilot();
 app2.pilot.fetch(
  { 
   beforeSend : function(xhr) {
     xhr.setRequestHeader(\'X-WP-NONCE\', POST_SUBMITTER.nonce);
   },  
   data: ({id: 1})
   }
 ).then(function(){
    console.log(app2.pilot)
})    

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

documentation:

  1. Backbone.sync是主干网每次尝试向服务器读取或保存模型时调用的函数。默认情况下,它使用jQuery.ajax发出RESTful JSON请求并返回jqXHR.

    sync函数可以全局重写为Backbone.sync, 或者在更细粒度级别,通过添加sync功能到主干集合或单个模型。

    因此,您最初拥有的代码实际上很好,但您应该return 这个Backbone.sync() 结果如下:

    app2.Pilot = Backbone.Model.extend({
      url: POST_SUBMITTER.root + \'pilotdata/v1/pilot/\',
      sync: function( method, model, options ){
        return Backbone.sync(method, this, jQuery.extend( options, {
          beforeSend: function (xhr) {
            xhr.setRequestHeader( \'X-WP-NONCE\', POST_SUBMITTER.nonce );
          },
        } ));
      },
    });
    
    其次,你应该通过同样的考试method 该主干传递给模型的自定义sync() 函数,正如上面所示。虽然你不必这么做,但我也使用jQuery.extend() 扩展options 传递给该sync() 作用

    另一种方法是在调用模型的fetch() 函数,但扩展sync() 由于不需要为每个请求指定标头,因此函数的性能要好得多。:)

相关推荐

Ajax/阅读更多:多个check_ajax_referer()和wp_create_nonce()不能独立工作

我在同一页上有多个wp\\U查询。每个查询的底部都有一个AJAX“阅读更多”按钮。我发现的问题是,我一次只能让一个人工作。函数中首先添加的函数。php,其中一个有效-另一个在管理ajax时出现403错误。php。我对AJAX非常陌生,所以我可能已经对它进行了彻底的哈希处理,我相信有一种方法可以将其组合到单个函数中(首选!)但如果我能找到一种让他们都独立工作的方法,那就好了。这是我的代码:自定义页面中的2个WP\\U查询可以正常工作。php模板:第一个:<?php //Find out