将jQuery变量传递给php函数并运行它

时间:2018-01-23 作者:C.Yasa

这可能是一个重复的问题,但我无法使用此链接”POST from jQuery to PHP“所以请帮助我实现这一点。我正在尝试将jquery变量传递给php函数并运行它。我有freshdeskreply.js文件,我的php函数位于主题文件夹的send\\u reply.php中。

在js文件中,我试图传递这个。name(即票证id)和textreply(即textarea值)到我的php函数并运行它。我已经试了一周了,但没能成功,请一步一步地给我看看。非常感谢。

我还能够提醒js值,但无法将其发布到php函数。js文件已注册并可用于页面加载。

功能。php

/*Reply JS*/
add_action( \'wp_enqueue_scripts\', \'my_scripts\' );

function my_scripts() {
    wp_enqueue_script( \'my_js_library\', get_stylesheet_directory_uri() . \'/freshdeskreply.js\' );
    wp_localize_script( \'my_js_library\', \'my_local_var\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
}
/*END - Reply JS*/
freshdeskreply。js公司

jQuery(document).ready(function($) {   
         /*Ticket Reply button*/
      $(\'[id^="send_reply"]\').click(function() {
         var textreply = $(\'textarea#replyarea\' + this.name).val();
            if(!textreply.trim()){
       alert("Reply area can not be empty...");
      }
      else{
        $.ajax({
    url: my_local_var.ajax_url, 
    type: \'POST\',
    data:{
      action: \'myaction\', 
      textreply: textreply,
      ticketid: this.name
    },
    success: function( data ){
      //Do something with the result from server
      console.log( data );
    }
  });
       alert(textreply);
       alert(this.name);
       location.reload();
        }
      });

});
给你回信。php

add_action( \'wp_ajax_myaction\', \'post_note\' );
add_action( \'wp_ajax_nopriv_myaction\', \'post_note\' );

    /*Reply*/
    function post_note() {

                    $api_key = "XXXXXXXXXXXXXXX";
                    $password = "x";
                    $yourdomain = "XXX";

                    $ticketid = $_POST[\'ticketid\'];
                    $reply_body = $_POST[\'textreply\'];

                    $notprivate = "false";

                    $note_payload = array(
                      \'body\' => $reply_body,
                      \'private\' => $notprivate,
                      \'user_id\' => $contact_id,
                    );

                    $url = "https://$yourdomain.freshdesk.com/api/v2/tickets/$ticketid/notes";
                    $ch = curl_init($url);
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
                    curl_setopt($ch, CURLOPT_POST, true);
                    curl_setopt($ch, CURLOPT_HEADER, true);
                    curl_setopt($ch, CURLOPT_USERPWD, "$api_key:$password");
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $note_payload);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

                    $server_output = curl_exec($ch);
                    $info = curl_getinfo($ch);
                    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
                    $headers = substr($server_output, 0, $header_size);
                    $response = substr($server_output, $header_size);

                    if($info[\'http_code\'] == 201) {

                    }
                                    curl_close($ch);
    }
    /*End Reply*/

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

本地测试并发现问题。

注册/enq JS时,需要本地化脚本。这是您将PHP中的任何内容传递到脚本的机会。在这种情况下,您至少应该这样传递WP ajax url:

    wp_localize_script( \'my_js_library\', \'my_local_var\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
更多详细信息请参见:https://codex.wordpress.org/Function_Reference/wp_localize_script#Usage

在JS中,更新给定给ajax() 调用以使用此值:

url: \'send_reply.php\', // wrong
url: my_local_var.ajax_url,  // right
您还应该将脚本放入连接到的函数中wp_enqueue_scripts. 你可能正在做这件事,只是没有超过上面的内容。将此代码添加到函数。php:

add_action( \'wp_enqueue_scripts\', \'my_scripts\' );

function my_scripts() {
    wp_enqueue_script( \'my_js_library\', get_stylesheet_directory_uri() . \'/freshdeskreply.js\' );
    wp_localize_script( \'my_js_library\', \'my_local_var\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
}
注意:除非PHP已包含(到functions.PHP等)或已连接到某个操作,否则PHP将不可用于执行。OP的回调和操作挂钩位于未加载的外部PHP文件中。

编辑:修复了原始帖子中的代码格式。

编辑:明确在何处添加排队和本地化代码。

编辑:添加了将ajax操作和回调移动到函数的注释。php

结束

相关推荐

如果点击下拉菜单,如何使用jQuery隐藏/显示元框

我是jQuery的新手,尝试使用jQuery向管理员(新帖子)动态添加文本字段。例如,仅当我从下拉选择菜单中单击“其他”时,文本字段才可见。这是我的“尝试”:jQuery: jQuery(document).ready( function() { jQuery(\'#prefix-nums\').bind(\'change\', function (e) { if( jQuery(\'#prefix-nums\').val() == \'other\') { $(\