Ajax发送数据但php没有收到它

时间:2016-06-16 00:22:24

标签: javascript php jquery ajax wordpress

我正在使用 ajax 将数据发送到php函数。最终目标是根据 $tweetdate 显示数据行。这是我的ajax脚本:

jQuery('#bootstrapModalFullCalendar').fullCalendar({
    dayClick:  function(date, event, jsEvent, view) {
            var date = date.format();
        jQuery.ajax({
            type: "POST",
            url: ajaxurl,
            data: {
                'action': 'show_scheduled_tweets',
                'tweetdate': date
            },
            beforeSend: function() {
                console.log('before')
            },
            success: function(){
                console.log('success')
            },
            error: function(){
                console.log('error')
            },
        });
    }
});

这是我的php函数(add_action用于WordPress用法):

<?php
    add_action('wp_ajax_show_scheduled_tweets', 'show_scheduled_tweets');
    function show_scheduled_tweets () {
        global $wpdb;
        $tweetdate = $_POST["tweetdate"];
        $query = "SELECT * FROM wp_tweettweet WHERE tweetdate='$tweetdate'";
        $results = $wpdb->get_results($query, ARRAY_A);

        foreach($results as $result) {
            $tweet2 =  $result[text];
            $recycleOption = $result[recycle];
            $id = $result[id];

            $currentDateTime = $result[time];
            $time = date('h:i A', strtotime($currentDateTime));


        ?>

            <form class="tweetclass form-inline" action="" method="post">
                <input type="checkbox" name="recycle" <?php if($recycleOption == 1){ echo "checked";} ?>>Recycle Tweet?
                <input class="tweetinput" type="text" name="tweetupdate" value="<?php echo $tweet2; ?>">
                <input type="hidden" name="id" value="<?php echo $id; ?>">
                <input type="text" name="timepicker" class="timepicker" value="<?php echo $time; ?>"/>
                <input class="tweetsubmit" type="submit" value="Save">
                <input class="tweetdelete" type="submit" value="delete">
            </form>
        <?php
        }
    }
    show_scheduled_tweets();
?>

fullCalendar jQuery 活动日历。当用户点击一天(dayClick)时,该日保存到日期。那个日期就是我想要保存到我的ajax中的“tweetdate”。

在chrome中,当我使用检查器上的网络选项卡时,我可以看到ajax结果,并且单击的日期设置为“tweetdate”。这不是我的PHP功能。在我的php “tweetdate”中没有获得分配给它的值。

现在,如果我进入我的php函数并将“tweetdate”设置为实际日期而不是 $_POST["tweetdate"]; ,例如2016-06-15比一切都完美。

我不太确定发生了什么。

1 个答案:

答案 0 :(得分:1)

要使其有效,您需要一个更重要的事情

add_action('wp_enqueue_scripts', 'my_custom_scripts'); 
my_custom_scripts(){
    // Here you register your script for example located in a subfolder `js` of your active theme
    wp_enqueue_script( 'ajax-script', get_template_directory_uri().'/js/script.js', array('jquery'), '1.0', true );
    // Here you are going to make the bridge between php and js
    wp_localize_script( 'ajax-script', 'my_ajax', array( 'ajaxurl' =>   admin_url( 'admin-ajax.php' ) ) );
}

请参阅'ajax-script'wp_enqueue_script()两个函数wp_localize_script() ...

然后,您将在'ajaxurl'中的'my_ajax'中检索jsurl:my_ajax.ajaxurl,

jQuery(document).ready(function($) {

    jQuery('#bootstrapModalFullCalendar').fullCalendar({
        dayClick:  function(date, event, jsEvent, view) {
                var date = date.format();
            jQuery.ajax({
                type: "POST",
                url: my_ajax.ajaxurl,// Here 'my_ajax' & 'ajaxurl' from wp_localize_script()
                data: {
                    'action': 'show_scheduled_tweets',
                    'tweetdate': date
                },
                beforeSend: function() {
                    console.log('before')
                },
                success: function(){
                    console.log('success')
                },
                error: function(){
                    console.log('error')
                },
            });
        }
    });
});

现在你可以在你的php中获得$_POST["tweetdate"];

更新:可能需要添加到您的php功能(前端):

add_action('wp_ajax_nopriv_show_scheduled_tweets', 'show_scheduled_tweets');

并且在功能结束时到die();。所以你将拥有:

add_action('wp_ajax_show_scheduled_tweets', 'show_scheduled_tweets'); // backend
add_action('wp_ajax_nopriv_show_scheduled_tweets', 'show_scheduled_tweets'); // fronted
function show_scheduled_tweets () {
    global $wpdb;
    $tweetdate = $_POST["tweetdate"];
    $query = "SELECT * FROM wp_tweettweet WHERE tweetdate='$tweetdate'";
    $results = $wpdb->get_results($query, ARRAY_A);

    foreach($results as $result) {
        $tweet2 =  $result[text];
        $recycleOption = $result[recycle];
        $id = $result[id];

        $currentDateTime = $result[time];
        $time = date('h:i A', strtotime($currentDateTime));


    ?>

        <form class="tweetclass form-inline" action="" method="post">
            <input type="checkbox" name="recycle" <?php if($recycleOption == 1){ echo "checked";} ?>>Recycle Tweet?
            <input class="tweetinput" type="text" name="tweetupdate" value="<?php echo $tweet2; ?>">
            <input type="hidden" name="id" value="<?php echo $id; ?>">
            <input type="text" name="timepicker" class="timepicker" value="<?php echo $time; ?>"/>
            <input class="tweetsubmit" type="submit" value="Save">
            <input class="tweetdelete" type="submit" value="delete">
        </form>
    <?php
    }
    die(); // very important to get it working
}

更新2:重要! - 这次应该可以使用了!

  • 我输入了一点错误:
    它是add_action('wp_ajax_nopriv_ …而不是add_action('wp_ajax_no_priv_ …

  • 这些php代码需要位于您的活动主题(或子主题)的function.php文件中。

然后你会在其他地方调用你的函数,或者你可以用一些add_action()钩子挂钩它。

show_scheduled_tweets();

参考文献: