我正在学习Backbone.js并尝试基于它构建简单的主题。我在functions.php这段代码中加载了js:
function load_js() {
wp_enqueue_script('app-js', get_template_directory_uri() . '/app.js', array('backbone'));
wp_localize_script('app-js', 'mechanics', array('ajaxurl' => admin_url('admin-ajax.php')));
}
add_action('wp_enqueue_scripts', 'load_js');
在app.js中这个简单的代码来获取帖子:
(function($){
var Post = Backbone.Model.extend({});
var Posts = Backbone.Collection.extend({
model: Post,
url: mechanics.ajaxurl
});
var new_posts = new Posts;
new_posts.fetch();
})
服务器端工作(我用jquery测试过它)。如果认为问题是与url声明。有人可以告诉我它应该是什么样子,或者jQuery ajax和Backbone同步网址之间是否存在差异?
使用jQuery版本
jQuery(document).ready(function() {
var $ = jQuery;
$.ajax({
type: "GET",
url: mechanics.ajaxurl,
data: { action : 'mechanics_get_posts' },
dataType: "json",
success: function( response ) {
alert( response );
}
});
});
答案 0 :(得分:6)
我需要为抓取功能添加数据。最终代码如下所示:
var Post = Backbone.Model.extend({});
var Posts = Backbone.Collection.extend({
model: Post,
url: mechanics.ajaxurl
});
var new_posts = new Posts;
new_posts.fetch({
data: { action: 'mechanics_get_posts' }
});
答案 1 :(得分:0)
更新:确保已加载Underscore和jQuery。
Backbone。$ = jQuery,所以Backbone.fetch()是jQuery.ajax({type:“GET”});
您的集合中的url属性应该是一个字符串。我不熟悉机制,所以如果“mechanics.ajaxurl”在窗口对象上作为字符串而指向一个有效的端点,它返回JSON,它应该可以工作。
变化:
var new_posts = new Posts;
要:
var new_posts = new Posts();
然后,与$.ajax
一样,在您的fetch()
方法中,您可以执行以下操作:
new_posts.fetch({
success: function(collection, object, jqXHR) {
your code...
},
error: function(jqXHR, statusText, error) {
your code...
}
});