【问题标题】:Not able to get JS variable to PHP using AJAX无法使用 AJAX 将 JS 变量获取到 PHP
【发布时间】:2016-01-01 22:26:46
【问题描述】:

我在 wordpress 网站 (PHP) 中有一个要求,在选择下拉菜单时,会显示两个单选按钮,并且根据选择的单选按钮,选择下拉菜单将可用。

我已经到了可以使用单选按钮的阶段。我使用 jQuery ON 事件来识别选中了哪个单选按钮,并在 javascript 变量中具有相应的值。我正在尝试使用 ajax 将此 JS 变量传递给我的 php。 ajax 的成功属性工作正常,但 $_POST['name'] 不显示该值。我尝试在 ajax 的成功属性中使用 .html() ,但这只是用 javascript 变量的值替换了我的 div 元素。我需要在我的 PHP 代码中使用这个 JS 变量值,以便我可以运行一个条件,根据该条件我决定需要在网站上显示哪个下拉列表。

几天以来我一直在尝试解决方案,但无法找到解决方案。请求一些指导

编辑: 根据收到的建议 我尝试了以下更改。我在输入 type=hidden 元素中看到了该值,但前提是我在 Chrome 中使用了 Inspect。但是使用查看源并没有显示这些值。我错过了什么?有人可以给一些指导..

Ajx-script.js

$.ajax({
  type : "POST",
  url : myAjaxData.ajaxurl,
  data : {
  action : "sProdOrRegion_ajax_action",
  selectedProdReg : selectedProdReg                     
  },
  success : function(data) {
   $("#radioValueHidd1").val(selectedProdReg);                  
   // $('#stakeholderParentData').load( urlValue + " " +"#stakeholderData");
   //$("input[id=radioValueHidd3][value="+ selectedProdReg +"]").html();
   $("input[id=radioValueHidd2]").val(selectedProdReg);
 }
});

functions.php

add_action('wp_enqueue_scripts', function() {
wp_enqueue_script('my-ajax', get_template_directory_uri() . '/library/js/ajx-script.js', array('jquery') );
wp_localize_script(
'my-ajax',
'myAjaxData',
array( 'ajaxurl' => admin_url('admin-ajax.php') )
);
});

add_action( 'wp_ajax_singleIdeaProdOrRegion_ajax_action', 'callback_singleIdeaProdOrRegion' );
add_action('wp_ajax_singleIdeaProdOrRegion_ajax_action', 'callback_singleIdeaProdOrRegion');

function callback_singleIdeaProdOrRegion() {
    if(isset($_POST['selectedProdReg'])) {
        $selectedProdReg =  $_POST['selectedProdReg'];
        $selectedProdReg1 =  $_POST['selectedProdReg'];
        die();
    }

}

单车.php

<div id="stakeholderParentData" class="stakeholderParentData">
                                <div id="stakeholderData" class="stakeholderData">
                                <?php $selectedProdReg = $wpdb->escape($_POST['selectedProdReg']); ?>



                            <?php


                                if (isset ( $selProdReg )) {
                                    if ($selProdReg === "custom_post_prod_company") {

【问题讨论】:

  • 发布你目前拥有的东西
  • 看起来您的urlVal 没有调用single-car.php 脚本,给定值为http:localhost/car/my-future-car/
  • @maxhb,他们可能正在使用 urlrewriting。 @rbpjava,javscript 变量selRegProd 的值是多少?
  • @Untitled123:我现在没有完整的代码,但这是我上次编写的代码。上面的 ajax 会将我的 html 表单 div id RegionProductID 替换为预期的 JS 值。但不是 PHP 代码。
  • @Patrick Evans :这是我想从 JS 传递给 PHP 的 input type="radio" 值。

标签: javascript php jquery ajax wordpress


【解决方案1】:

在 WordPress 中使用 Ajax 通常有以下几种方式:

1- 您必须将您的 ajax 数据提交到 admin-ajax.php。有时您可以使用 WordPress 为该 URL 预定义的全局 js 变量 ajaxurl。但更可靠的是,我会使用 admin_url( 'admin-ajax.php' ) 的输出。

2- 您的数据对象必须包含一个 action 值,该值具有一个唯一的字符串来表示此 ajax 提交。我将在这里使用AJAX_ACTION:data = { action: 'AJAX_ACTION', your_var: 'your_val' };

3- 使用包含您指定的操作名称的钩子接收数据:

add_action( 'wp_ajax_AJAX_ACTION', 'callback_function' );
add_action( 'wp_ajax_nopriv_AJAX_ACTION', 'callback_function' ); 

4- 使用您的callback_function 接收数据:

function callback_function() {
    // $_POST['your_var'] is accessible here
}

顺便说一句,在callback_function 中使用echo 会导致将响应发送到成功函数。

wp_ajax_nopriv_AJAX_ACTION 是为没有 WordPress 帐户或未登录的访问者提交的,而wp_ajax_AJAX_ACTION 是为已登录的用户提交的。

请查看:WordPress Codex

【讨论】:

  • 试过你的方法,但表单数据仍然显示在 admin-ajax.php 中,而不是我对 php 的自定义..
  • 定义“我的 php 自定义”。你的意思是你的插件或主题?这就是钩子的用途:add_action( "wp_ajax_**AJAX_ACTION**'" 'callback_function' ); add_action( wp_ajax_nopriv_**AJAX_ACTION**", 'callback_function' ); 请注意 AJAX_ACTION 用作您在数据中对 action 的值的占位符。另外我会尝试使用 $.post 或 $.get。你知道 WordPress 使用 jQuery 而不是 $ 对吗?比如 jQuery.post 而不是 $.post.
【解决方案2】:

我不确定这些是否会对您有所帮助,但我有两个想法。首先是您可能会得到单选按钮的值为 false。其次,也许你应该这样写你的数据。

data: { "selRegProd" : selRegProd },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多