用表单替换链接以将变量传递给javascript / ajax - 单个脚本

时间:2014-06-03 21:49:37

标签: javascript php jquery ajax wordpress

我通过链接向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()查看该对象,我认为这是一个巨大的错误对象。

2 个答案:

答案 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请求..在服务器端处理它并从那里返回响应。