2013-12-13 1 views
-1

Ajax-вызов успешно обновляет запись, но не возвращает строку эха. Этот скрипт работал раньше, но может быть из-за некоторого обновления он перестает работать. Он отлично работает на моей локальной системе, но когда я перехожу на сервер bluehost, это не работает.Ajax-вызов не возвращает данные после эхо-сигнала

Вот мой Ajax вызов:

// call to ajax script to update site 
     function autopost_update_site() { 

      // get base directory url 
      var baseDir = jQuery('#baseDir').val(); 
      var id = jQuery('#site_id').val(); 
      var site_name = jQuery('#site_name').val(); 
      var site_url = jQuery('#site_url').val(); 
      var is_active; 
      if (jQuery('#active_radio').is(':checked')){ 
       is_active = '1'; 
      } else { 
       is_active = '0'; 
      } 

      var username = jQuery('#login_username').val(); 
      var login_pass = jQuery('#login_pass').val(); 

      // call to ajax script to update script 
      jQuery.ajax({ 
       type: "POST", 
       url: baseDir + "/autopost_ajax_actions.php", 
       data: "id=" + id + "&site_name=" + site_name + "&site_url=" + site_url + "&is_active="+ is_active + "&username=" + username + "&login_pass="+login_pass +"&action=update_site", 


       beforeSend: function() { 
        jQuery('#update_site_button').attr("disabled", true); 
        // shortcode edit button 
        jQuery('#update_site_button').html('Updating...'); 
        // admin page edit button 
        jQuery('#update_site_button').val('Updating...'); 
       }, 
       complete: function() { 
        jQuery('#update_site_button').attr("disabled", false); 
        // shortcode edit button 
        jQuery('#update_site_button').html('Update'); 
        // admin page edit button 
        jQuery('#update_site_button').val('Update'); 
       }, 
       success: function(data) { 
        alert("Result: " + data); // NOTHING IS HAPPENING HERE, NO ALERT DATA 
        if (jQuery.trim(data) === "success") { 
         alert("Site updated."); 
         // refresh page 
         window.setTimeout('location.reload()', 200); 
        } else { 
         alert("Some error occured, Please try again."); 
        } 
       } 
      }); 
     } 

Вот мой заказ PHP скрипт для АЯКС действий:

// update site 
    if ($_POST['action'] == 'update_site' && isset ($_POST['id'])) { 

      // collect site data 
      $site_name = $wpdb->escape($_POST['site_name']); 
      $site_id = intval($wpdb->escape($_POST['id'])); 
      $site_url = $wpdb->escape($_POST['site_url']); 
      $username = $wpdb->escape($_POST['username']); 
      $login_pass = $wpdb->escape($_POST['login_pass']); 
      $is_active = $wpdb->escape($_POST['is_active']); 

      $query = $wpdb->prepare("UPDATE " . $autopost_sites_table_name . " SET site_name = %s, site_url = %s, username = %s, login_pass = %s, is_active = %s WHERE id = %s", $site_name, $site_url, $username, $login_pass, $is_active, $site_id);    
      #$log->LogDebug($query); 
      // execute query 
      $result = $wpdb->query($query); 

      #$log->LogDebug($result); 

      if ($result !== FALSE || $result !== 0) { 

       // return success 
       $response = "success"; 
       #$log->LogDebug($response); 
       echo $response; // THIS RESPONSE IS NOT SHOWING ON AJAX SUCCESS 

      } else { 
       $log->LogError("Failed to update site with ID: " . $_POST['id']); 
       echo "Failed to update site."; 
      } 

    } 

Может кто-нибудь сказать мне, что не хватает?

+0

«НИЧЕГО НЕ ПРОИСХОДИТ ЗДЕСЬ, НИКАКОЙ ДАННЫХ О ПРЕДУПРЕЖДЕНИИ» - Если вы не получаете предупреждение, функция успеха не работает. Посмотрите вкладку net tools разработчика. Посмотрите HTTP-запрос и его ответ. Это то, чего вы ожидаете? Какие ошибки сообщаются? – Quentin

+0

Вызывается ваш журнал ошибок? – Zarathuztra

+1

Используя проверку хрома, проверьте сетевой раздел, чтобы проанализировать, правильно ли отправлен ajax и каков ответ. –

ответ

-2

после

echo $response; 

поставил

die(); 

См http://codex.wordpress.org/AJAX_in_Plugins

В примере он говорит:

function my_action_callback() { 
    global $wpdb; // this is how you get access to the database 

    $whatever = intval($_POST['whatever']); 

    $whatever += 10; 

    echo $whatever; 

    die(); // this is required to return a proper result 
} 
+1

Это не сработает. Сценарий остановит свое собственное выполнение, как только он достигнет конца, что и будет в этом случае. – Zarathuztra

+0

Вы попробовали? Я должен был сделать это так раньше. Возможно, это всего лишь Wordpress, но получение ответа на эхо от вызова Wordpress ajax необходимо вызвать die() или вы не получите результат. – mjhinch

+0

См. Http: //codex.wordpress.org/AJAX_in_Plugins Где написано: die(); // это необходимо для возврата правильного результата. – mjhinch

1

Изменить data следующим

data:{ 
     id:id, 
     site_name:site_name, 
     site_url:site_url , 
     is_active:is_active , 
     username:username, 
     login_pass:login_pass, 
     action:"update_site" 
    } 
1

Как указывается, что скрипт работает прекрасно на местном, но не работает на сервере. Так что это была проблема с сервером, и я получал ошибку для «Access-Control-Allow-Origin» в хром-сети.

Я просто добавил

header('Access-Control-Allow-Origin: *'); 

к моему сценарию действий Ajax и это сработало! Спасибо

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