使用AJAX从<select>下拉列表中检索值?</select>

时间:2013-10-30 13:46:40

标签: php jquery ajax wordpress

我想检索更改下拉列表的值,并将其发布到我的PHP(目前,PHP只是var_dump,用于调试目的)

我坚持将选定的值发布到我的AJAX,似乎没有变化。

我使用WP框架加载脚本并通过admin-ajax.php运行它们 - 我一直都是 将此方法用于其他AJAX函数,它正在运行。

我有一个下拉列表,如下所示:

HTML

<form action="" method="post">                        
 <select name="count" class="count">
  <option value='1'>1</option>  
  <option value='2'>2</option>  
  <option value='3'>3</option>  
  <option value='4'>4</option>  
  <option value='5'>5</option>  
 </select>
<input class="koordinator_id" type="hidden" name="koordinator_id" value="<?php echo $_SESSION['coordinator_id'] ?>">     
</form>

AJAX

$(document).ready(function () {
    $('select.count').change(function () {

        alert("Whyunoalert?");

        $.ajax({
            type: "POST",
            url: (my_ajax_script.ajaxurl),
            data: ({
                action: 'generate',
                koordinator_id: $('input[name=$"koordinator_id"]').val(),
                id: $('select.count').val()
            }),
            success: function (msg) {
                alert("Data changed:" + msg);
            }
        });
    });
});

PHP

function generate() {     
    $count = $_POST['id'];
    var_dump($count);
    $koordinator_id = $_POST['koordinator_id'];
    var_dump($koordinator_id);
}

编辑

我已将相应的代码更改为前三个注释。现在我的代码执行AJAX但仍然没有在php文件中创建var_dump。感谢您的帮助到目前为止,希望您能做得更多。我还添加了functions.php代码,其中绑定了php函数,并设置了重定向到ajax-admin.php。

的functions.php

function load_scripts() {

wp_enqueue_script('local_jquery', '/wp-content/themes/tutorial_theme/scripts/scripts.js');
wp_enqueue_script('ajax_func', get_template_directory_uri() . '/scripts/ajax_implementation.js');

}
if (!is_admin())
add_action('wp_enqueue_scripts', 'load_scripts');
add_action('template_redirect', 'load_scripts');

$dirName = dirname(__FILE__);
$baseName = basename(realpath($dirName));
require_once ("$dirName/ajax_functions.php");

add_action("wp_ajax_nopriv_approve", "generate");
add_action("wp_ajax_approve", "generate");

第二次编辑

从ajax中删除了这个:(来自旧的复制粘贴)

     dataType: 'html',

4 个答案:

答案 0 :(得分:2)

数据行中的选择器$('input[name=$"koordinator_id"]')错误。输入名称以某个字符串结尾的语法是$('input[name$=somestring]']

请改用:

$('input[name$="koordinator_id"]') // '$' needs to be before '='
             ^

答案 1 :(得分:1)

{之后你错过了.ready(function()。修复如下:

$(document).ready(function () {
    $('select.count').change(function () {
        alert("Whyunoalert?");

        $.ajax({
            type: "POST",
            url: 'my_ajax_script.ajaxurl',
            data: ({
                action: 'generate',
                koordinator_id: $('input[name=$"koordinator_id"]').val(),
                id: $('select.count').val()
            }),
            dataType: 'html',
            success: function (msg) {
                alert("Data changed:" + msg);
            }
        });
    });
});

答案 2 :(得分:1)

首先,如果您要触发ajax onchange事件,为什么要将它们包装在表单标记中?如果onchange事件以外没有用,请将其删除。

其次,你在action: 'generate'中使用ajax function,但你没有在php的函数文件中挂钩正确的操作

add_action("wp_ajax_nopriv_YOUR_ACTION", "METHOD");
add_action("wp_ajax_YOUR_ACTION", "METHOD");

所以它会是

add_action("wp_ajax_nopriv_generate", "generate");
add_action("wp_ajax_generate", "generate");

最后但并非最不重要的是总是退出你的ajax方法调用,所以请确保它不会落在下面。

function generate() {     
    $count = $_POST['id'];
    var_dump($count);
    $koordinator_id = $_POST['koordinator_id'];
    var_dump($koordinator_id);
    exit;
}

同样@Krishna回答删除$符号unexpected expression

koordinator_id: jQuery('input[name=$"koordinator_id"]').val(),

需要:

koordinator_id: jQuery('input[name="koordinator_id"]').val(),

答案 3 :(得分:0)

试试这个

$(document).ready(function()
$('.count').change(function() {
    $.ajax({
        type: "POST",
        url: 'my_ajax_script.ajaxurl',
        data: {'action': 'generate', 'koordinator_id': $('input[name=koordinator_id]').val(), 'id': $('.count').val()}),
        dataType: 'html',
        success: function(msg) {
            alert("Data changed:" + msg);
        }
    });       
});
});

还要避免使用php短标签。如果你的php版本不支持短标签,有时会引起问题。所以改变这个

<input class="koordinator_id" type="hidden" name="koordinator_id" value="<?php echo $_SESSION['coordinator_id'] ?>">