2016-06-16 3 views
2

Я использую ajax для отправки данных в php-функцию. Конечной целью является отображение строк данных на основе $tweetdate. Вот мой Ajax скрипт:Ajax отправляет данные, но php не получает его

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), этот день сохраняется на сегодняшний день. Эта дата - это то, что я пытаюсь сохранить для «tweetdate» в моем ajax.

В хром, когда я использую вкладку сети на инспекторе, я вижу результат ajax, а дата, на которую нажимается, установлена ​​на «tweetdate». Это не зависит от моей php-функции. В моем php «tweetdate» не получает присвоенное ему значение.

Теперь, если я зашел в свою php-функцию и установил «tweetdate» на фактическую дату вместо , например. 2016-06-15, чем все работает отлично.

Я не совсем уверен, что происходит.

+0

'console.log (date)' внутри вашей функции «dayClick», чтобы увидеть, что он содержит ожидаемое значение. Отправьте это значение здесь. – Marcus

+0

Вы уверены, что 'date' - это не просто объект? – Marcus

+0

Да, да. Например, если я нажимаю 11 июня, возвращаемое значение равно 2016-06-11 – user715564

ответ

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' в вашем js в url: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') 
       }, 
      }); 
     } 
    }); 
}); 

Теперь вы можете получить $_POST["tweetdate"]; в своем php !!!


Update: Может быть, вы должны добавить к вашей функции 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 
} 

Update 2: важно! - На этот раз он должен работать!

  • Я сделал немного опечатка:
    Пришло add_action('wp_ajax_nopriv_ … вместо add_action('wp_ajax_no_priv_ …

  • Эти коды PHP должен быть на function.php файла вашей активной темы (или детской теме) ,

Тогда вы будете называть вашу функцию где-нибудь еще, или вы можете подключить его с некоторыми add_action() крючками.

show_scheduled_tweets(); 

Литература:

+0

Спасибо, я очень благодарен, но я боюсь, что он все еще не работает. В php $ tweetdate = $ _POST ["tweetdate"] , все еще не получает данные, отправленные из ajax. – user715564

+0

Да, все это правильно. Я использую тему очень бобовых тестов. У меня есть другие вызовы ajax, например. удаление и редактирование строк, которые работают нормально. Это только тот, который не работает должным образом. Кроме того, если это имеет значение, это настраивается как плагин. – user715564

+0

Нет, это тоже не сработало. Ничего не выделяется в запросе базы данных? $ query = "SELECT * FROM wp_tweettweet WHERE tweetdate = '$ tweetdate'"; – user715564

Смежные вопросы