首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WordPress插件中处理跨域AJAX POST请求

在WordPress插件中处理跨域AJAX POST请求
EN

Stack Overflow用户
提问于 2017-10-27 21:02:08
回答 2查看 2.2K关注 0票数 0

我有下一个情况:

  • 我有一个带有简单API的WP插件。
  • 这个插件可以安装到WP实例中,在不同的主机上使用不同的文件夹结构(例如,WPEngine)。没有编辑.htaccess的能力
  • 另一个域上有一个客户端,它应该通过AJAX将数据范围发送到我的插件并获得计算数据(跨域请求);

插件-这是我的产品。

AJAX客户端-另一个用户,谁将使用我的“计算器”。

所以问题:

  • 我应该如何在插件中捕获这个请求?
  • 应该使用哪个URL来访问我的API?我不能使用URL与插件的完整路径和文件与处理程序。
  • 将超级理解AJAX请求方法的外观。
EN

回答 2

Stack Overflow用户

发布于 2018-01-16 08:21:11

这种方法不安全。您应该使用accepting来接受跨域请求。另外,您应该添加随附带的auth1.0。下面是一个链接,展示如何将自己的端点添加到rest https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

下面的链接向您展示了如何使用auth1.0进行身份验证来保护api。https://wordpress.org/plugins/rest-api-oauth1/

希望这能有所帮助

票数 2
EN

Stack Overflow用户

发布于 2017-10-28 01:15:44

您需要在PHP中创建一个函数,以便对服务器进行API调用,并将其添加到阿贾克斯诺普列夫挂钩中。

代码语言:javascript
复制
add_action( 'wp_ajax_your_ajax_function', 'your_ajax_function' );
add_action( 'wp_ajax_nopriv_your_ajax_function', 'your_ajax_function' );
function your_ajax_function() {
    $url = 'http://www.google.com'; // url to your rest API
    if ( isset( $_POST['data'] ) ) {
        $response = wp_remote_post( $url, array( 'data' => $_POST['data'] ) );
        if ( is_wp_error( $response ) ) {
            echo $response->get_error_message();
            exit;
        }
        else {
            wp_send_json( $response );
        }
    }
}

为了确保您能够访问正确的ajax路径,本地化ajax的路径,以便在javascript中使用

代码语言:javascript
复制
add_action( 'wp_enqueue_scripts', 'localize_ajax' );
function localize_ajax() {
    wp_localize_script( 'jquery', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
}

注意:jquery更改为您的javascript文件和/或确保一旦jquery在页面上排队,就创建函数。

接下来,在javascript中创建函数,该函数调用data字段中传递用户值的ajax函数,并将其附加到某些事件侦听器:

代码语言:javascript
复制
function yourFunction() {
  jQuery.ajax( {
    method: 'POST',
    url: ajaxurl,
    data: {
      'action' : 'your_ajax_function',
      'data' : 'test'
    },
    success: function( response ) {
      // do what you want with your response
      console.log( response );
    }
  });
}

这将返回API调用的响应,因此使用response在DOM中填充结果。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46983366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档