我想检索更改下拉列表的值,并将其发布到我的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',
答案 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'] ?>">