我通过链接向javascript / ajax发送单个变量,但希望通过表单发送,以便我也可以传递用户输入。 (它是一个与Echonest Remix python脚本连接以创建音频编辑的插件)。简短的问题是如何在WP ajax javascript中收到此信息:
<form id="receive_me" method="POST">
Username: <input type="text" name="user_variable">
<input type="hidden" name="generated_var" value="'.$arguments.'">
<input type="submit" value="Submit">
</form>
JS:
function glitch_player_display(generated_var) {
jQuery.ajax({
type: 'POST',
url: ajaxglitch_playerajax.ajaxurl,
data: {
action: 'ajaxglitch_player_ajaxhandler',
mix_name: mix_name
},
success: function(data, textStatus, XMLHttpRequest) {
var showglitchplayer = '#showglitchplayer';
jQuery(showglitchplayer).html('');
jQuery(showglitchplayer).append(data);
},
error: function(MLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
这是PHP当前:
function glitch_player_show_make_mix(){
$result = "";
$generated_var = wp_create_nonce("ajaxloadpost_nonce");
$arguments = "'".$nonce."'";
$link = ' <div id="make_button"><a onclick="glitch_player_display('.$arguments.');">'. "Link Title" .'</a></div>';
$result .= '<h3>' . $link . '</h3>';
$result .= '<div id="showglitchplayer">';
$result .= '</div>';
$result .= '<div id="play_button"><a title="The Title" href="'.plugin_URL.$generated_var.'.mp3">First Mix</a></div>';
return $result;
}
add_action( 'wp_ajax_nopriv_ajaxglitch_player_ajaxhandler', 'ajaxglitch_player_ajaxhandler' );
add_action( 'wp_ajax_ajaxglitch_player_ajaxhandler', 'ajaxglitch_player_ajaxhandler' );
function ajaxglitch_player_ajaxhandler(){
$generated_var = isset( $_POST['generated_var'] )? $_POST['generated_var'] : false;
error_log( "The generated_var is $generated_var" ); // write it to the error_log too.)
但我不确定如何接收到javascript的POST。沿着这些方向的东西?
$('#inputForm').submit(function glitch_player_display(mix_name)
我不需要第二个PHP脚本吗?我会在正确的方向上进一步(或根本)感激一点。
谢谢并保持良好状态。
答案:根据下面的输入,这里有一种通过表单发送变量的方法:
<form id="form_id" name="form" method="post">
Field Title: <input type="text" id="user_input" size = 2>
<input type="hidden" id="mix_name" value="'.$arguments.'">
<input id="btn-submit" type="submit" onclick="glitch_player_display()" value="Submit">
</form>
这是JS / jQuery
function glitch_player_display() {
user_input = document.getElementById("user_input").value ? document.getElementById("user_input").value : 2;
generated_var = document.getElementById("generated_var").value ? document.getElementById("generated_var").value : "Default_Var";
$(document).on('submit', '#form_id', function(event){
event.preventDefault();
});
jQuery.ajax({
beforeSend: function() {
alert(generated_var + " in ajax user_input: " + user_input);
},
type: 'POST',
url: ajaxglitch_playerajax.ajaxurl,
data: {
action: 'ajaxglitch_player_ajaxhandler',
generated_var: generated_var,
user_input: user_input
},
success: function(data, textStatus, XMLHttpRequest) {play_button
var showglitchplayer = '#showglitchplayer';
jQuery(showglitchplayer).html('');
jQuery(showglitchplayer).append(data);
},
error: function(MLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
请注意,我们不是像第一种情况那样将变量发送到js函数glitch_player_display()
。我们通过document.getElementById("user_input").value
在JS函数中提取它。还
beforeSend: function() {
alert(generated_var + " in ajax user_input: " + user_input);
},
只是一种测试并查看jQuery.ajax
函数实际接收的内容的方法。由于我们实际上没有通过提交按钮调用另一个脚本,因此需要调用
$(document).on('submit', '#form_id', function(event){
event.preventDefault();
});
所以jQuery(或JS?)并不认为应该找到另一个脚本并生成错误,在这种情况下,用[object Object]替换user_variable。可以使用console_log()
查看该对象,我认为这是一个巨大的错误对象。
答案 0 :(得分:1)
你的按钮应该用onclick =&#34;&#34;来调用你的javascript函数参数和javascript函数可以使用documet.getElementById(&#34; fieldname&#34;)。value来访问这些字段,以便用它做你想做的事。只需给每个字段一个ID =&#34; fieldname&#34;,替换&#34; fieldname&#34;使用每个ID的唯一ID,然后使用document.getElementById()。
进行访问答案 1 :(得分:1)
首先启动ajax请求,您需要阻止表单提交的默认行为。
$('#inputForm').submit(function(e) {
// Prevent submitting the form normal way
e.preventDefault();
// Now call the function that handles the ajax request
glitch_player_display();
})
您需要从表单中获取值。您可以在.submit事件处理程序中执行此操作,并将mix_name作为参数传递给glitch_player_display(mix_name)函数,或者只调用不带参数的glitch_player_display(),并通过jquery在此函数中获取值。比你正在向ajaxglitch_playerajax.ajaxurl发出ajax请求..在服务器端处理它并从那里返回响应。