为什么插件AJAX响应是-1?

时间:2012-03-29 作者:Ajay Patel

我不知道为什么我总是这样回答我-1?我正在插件文件中使用此代码。我需要单击p标记的响应

<?php    function myajax(){ ?>
        <script type="text/javascript">
        jQuery(document).ready(function(){
                jQuery("#testbutton").click(function(){
                     jQuery.ajax({
                        url: "<?php echo admin_url(\'admin-ajax.php\'); ?>",
                        type: \'POST\',
                        data: {
                        action: \'stravyfuncajax22\'
                        },
                        dataType: \'html\',
                        success: function(response) {
                        alert(response);
                        }
                    });
                }); 

            });
    </script><?php
    echo\'
        <p id="testbutton1">click</p>\';
    }

    add_shortcode("my_ajax", "myajax");


    add_action(\'wp_ajax_stravyfuncajax22\', \'testfunc11\');
    add_action(\'wp_ajax_nopriv_stravyfuncajax22\', \'testfunc11\');

    function testfunc11() {
    echo "2";
    die();
    }
?>
EDIT : 现在添加了php标记。。。。

2 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

根据wordPress jedi,scribu的说法,你现在可以从插件处理程序内部将脚本排队。

http://scribu.net/wordpress/conditional-script-loading-revisited.html

你在重复一些东西,在短代码处理中,你必须返回。通过返回脚本,我遇到了一些让脚本正常工作的问题,所以我将其移动到了一个外部文件中,这个文件肯定能正常工作。

function myajax(){ 

    wp_enqueue_script(\'my-script\', plugins_url(\'my-script.js\', __FILE__), array(\'jquery\'), \'1.0\', true);

    $data = array( 
        \'ajaxurl\' => admin_url(\'admin-ajax.php\')
    );

    wp_localize_script( \'my-script\', \'myscriptL10n\', $data );

    $text = \'<a id="testbutton">click</a>\';

    return $text;
}
add_shortcode("my_ajax", "myajax");


add_action(\'wp_ajax_stravyfuncajax22\', \'testfunc11\');
add_action(\'wp_ajax_nopriv_stravyfuncajax22\', \'testfunc11\');

function testfunc11() {
    echo "2";
    die();
}
然后是我的剧本。js公司

jQuery(document).ready(function($){
    $("#testbutton").click(function(){
        $.ajax({
            url: myscriptL10n.ajaxurl,
            type: \'POST\',
            data: {
                action: \'stravyfuncajax22\'
            },
            dataType: \'html\',
            success: function(response) {
                alert(response);
            }
        });
    }); 
});
希望这有帮助。

EDIT 1我没有测试这一部分,但我认为它应该能够将表单值作为ajax响应进行响应。

`函数myajax(){

    wp_enqueue_script(\'my-script\', plugins_url(\'my-script.js\', __FILE__), array(\'jquery\'), \'1.0\', true);

    $data = array( 
        \'ajaxurl\' => admin_url(\'admin-ajax.php\')
    );

    wp_localize_script( \'my-script\', \'myscriptL10n\', $data );

    ob_start(); ?>

    <form id="form">
    <input type="text" name="foo" value="bar"/>
    <a id="testbutton">click</a>\';
    </form>

    <?php $text = ob_get_contents();

    return $text;
}
add_shortcode("my_ajax", "myajax");


add_action(\'wp_ajax_stravyfuncajax22\', \'testfunc11\');
add_action(\'wp_ajax_nopriv_stravyfuncajax22\', \'testfunc11\');

function testfunc11() {
    $data = $_POST[\'data\'];
    echo $data[\'foo\'];
    die();
}
`

新建javascript

jQuery(document).ready(function($){
    $("#testbutton").click(function(){
         data = $(\'#form\').serialize();
        $.ajax({
            url: myscriptL10n.ajaxurl,
            type: \'POST\',
            data: {
                action: \'stravyfuncajax22\',
                                data: data
            },
            dataType: \'html\',
            success: function(response) {
                alert(response);
            }
        });
    }); 
});

SO网友:Jared

在像这样回显响应之前,尝试对响应进行JSON编码(也不要忘记标题!)。

function testfunc11() {
    $response = json_encode( array( \'code\' => 2 ) );
    header( "Content-Type: application/json" );
    echo $response;
    exit;
}
然后在你的JS代码中。。

alert( response.code );
它应该显示“2”。

但是,我不建议使用jQuery.ajax, 相反,我建议使用this method 在我看来,它更容易阅读和使用。

结束

相关推荐

致命错误:在我的ajaxPage中对非对象调用成员函数Query()

我正在创建一个新插件,我遇到了这个错误致命的错误:在ajax页面中的非对象上调用成员函数query()。如何解决此错误。这是我的代码:if (isset($_REQUEST[\'ckballvalue\'])) { $allvideos=$_REQUEST[\'ckballvalue\']; $now = date(\"Y-m-d H:i:s\", time()); global $wpdb; $insert_video =$wpdb->que