如何使用promise在Wordpress中编写Ajax JQuery
How to write an Ajax JQuery in Wordpress using promises
我正在开发一个Wordpress谷歌地图插件,该插件通过Ajax从数据库中提取位置,并返回一个XML文件,然后由Javascript脚本处理,以便在谷歌地图上绘制这些位置。这一切都很完美,但我希望能够将它显示的数据限制在当前登录用户所拥有的位置。由于WP用户id存储在表中,这应该很容易。。。
在我的主题函数.php文件中,我有这个函数:
// Same handler function...
add_action( 'wp_ajax_get_current_user_id', 'get_current_user_id_callback' );
function get_current_user_id_callback() {
if (is_user_logged_in()) {
echo get_current_user_id();
wp_die();
}
}
add_action('template_redirect', 'my_enqueue');
function my_enqueue() {
// Enqueue the Javascript file
wp_enqueue_script( 'ajax-script', '/ajax/ajax-user.js', array('jquery') );
// in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' )) );
}
在处理XML的Javascript文件中,我有以下功能:
function getUserId() {
var data = {'action': 'get_current_user_id'};
jQuery.post(ajax_object.ajax_url, data, function(response) {
userId=response;
alert ('Within JQuery userId=' + userId);
return userId;}
);
}
当脚本加载时,它被调用:
var userId;
function load () {
userId=getUserId();
alert ('Outside of JQuery UserId=' + userId);
}
问题是,getUserId在有时间从数据库获取响应之前运行并返回undefined。我知道解决这个问题的方法是使用Ajax承诺,但我在Wordpress中找不到具体的工作示例。
据此:
如何从异步调用返回响应?
我只需要重写我的getUserId函数,使其包含.done和.fail,但如果我尝试这样做,我会得到语法错误,因为它不是真正的JQuery
如何在JQuery语法中重写getUserId,以便使用.done和.fail并从现有脚本中调用它?遗憾的是,我不是JQuery专家,我在Javascript方面也没有好到哪里去!
您到底尝试了什么还不清楚。但是,如果您只是从AJAX调用返回jqXHR,它应该可以工作:
function getUserId() {
var data = {'action': 'get_current_user_id'};
return jQuery.post(ajax_object.ajax_url, data);
}
然后在上面调用done
方法:
getUserId().done(function(data) {
alert( /* userid, depends on data */ );
});
顺便说一句,如果您告诉jquery解析JSON会更容易;这样,data
将是一个对象,而不是一个JSON字符串。有两种方法可以做到这一点。您可以将'json'
参数添加到jQuery.post
:
jQuery.post(ajax_object.ajax_url, data, null, 'json');
或者,您可以编写PHP脚本,以便它发送HTTP内容类型标头:
header('Content-type: application/json');
您必须在发送任何正文(甚至是空白)之前完成这一点。如果您这样做,那么jQuery.ajax
将默认将其读取为JSON。
- 在FrontEndphp-ajax-jquery中验证reCaptcha-google
- AJAX jquery json将数组发送到php
- 如何使用Ajax/jQuery设置cookie
- PHP/Ajax/jquery/JON-在Ajax Post之后将echo文本中的一部分作为变量返回
- 如何使用Ajax JQuery.ech()获取JSON值
- 使用springform时,如何在ajax/jquery中获取复选框值
- JSP AJAX jQuery填充表问题
- Piping Value: Ajax + JQuery
- 使用javascript Without Ajax/Jquery在特定行中启用文本框
- 在AJAX jQuery加载()之后运行jQuery代码
- 具有动态更新的实时标题 (AJAX+jQuery)
- ajax/jQuery Youtube 播放列表推送
- AJAX jQuery Avatar Uploading
- 全局变量 - AJAX jQuery
- Ajax jquery mysqli update
- 获取剩余时间和上传文件速度 - ajax jquery/js
- 使用ajax/jquery绑定Json数据
- TypeError Obj.root是未定义的ajax jquery
- 当数据类型为XML时,如何将url参数传递给AJAX jquery
- 在ajax Jquery之后无法获取隐藏字段的值