2014-04-17 103 views
0

我正在使用一個(部分)停止工作的插件。作者沒有那麼敏感,所以我開始挖掘自己。WordPress的Ajax調用返回0

我已經到了認爲我知道問題出在哪裏的部分:ajax調用始終返回0。

如果有人能幫助我在這裏?

從插件AJAX調用:

 var $this = $(this), 
     $parent = $this.parents('li'), 
     $container = $this.closest('.rwmb-uploaded'), 
     data = { 
      action: 'rwmb_delete_file', 
      _ajax_nonce: $container.data('delete_nonce'), 
      post_id: $('#post_ID').val(), 
      field_id: $container.data('field_id'), 
      attachment_id: $this.data('attachment_id'), 
      force_delete: $container.data('force_delete') 
     }; 

    $.post(ajaxurl, data, function(r) 
    { 
     console.log(ajaxurl); 
     console.log(data); 
     console.log(r); 
     if (!r.success) 
     { 
      alert(r.data); 
      return; 
     } 

     $parent.addClass('removed'); 

     // If transition events not supported 
     if (
      !('ontransitionend' in window) 
      && ('onwebkittransitionend' in window) 
      && !('onotransitionend' in myDiv || navigator.appName == 'Opera') 
     ) 
     { 
      $parent.remove(); 
      $container.trigger('update.rwmbFile'); 
     } 

     $('.rwmb-uploaded').on('transitionend webkitTransitionEnd otransitionend', 'li.removed', function() 
     { 
      $(this).remove(); 
      $container.trigger('update.rwmbFile'); 
     }); 
    }, 'json'); 

    return false; 

的的console.log(r)返回0,另外兩個日誌填充有正確的值。

的Ajax調用PHP代碼:

static function add_actions() 
    { 
     // Add data encoding type for file uploading 
     add_action('post_edit_form_tag', array(__CLASS__, 'post_edit_form_tag')); 

     // Delete file via Ajax 
     add_action('wp_ajax_rwmb_delete_file', 'wp_ajax_delete_file'); 
    } 

static function wp_ajax_delete_file() 
    { 
     $post_id  = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0; 
     $field_id  = isset($_POST['field_id']) ? $_POST['field_id'] : 0; 
     $attachment_id = isset($_POST['attachment_id']) ? intval($_POST['attachment_id']) : 0; 
     $force_delete = isset($_POST['force_delete']) ? intval($_POST['force_delete']) : 0; 

     check_ajax_referer("rwmb-delete-file_{$field_id}"); 

     delete_post_meta($post_id, $field_id, $attachment_id); 
     $ok = $force_delete ? wp_delete_attachment($attachment_id) : true; 

     if ($ok) 
      wp_send_json_success(); 
     else 
      wp_send_json_error(__('Error: Cannot delete file', 'rwmb')); 
    } 

但似乎 'wp_ajax_delete_file' 從不執行。

我正在查看此代碼現在幾天沒有找到解決方案。我不熟悉ajax,所以我不知道可能的解決方案的可能性。

如果您需要別的東西,我很樂意提供。

+0

您必須在ajax函數結束時使用die()函數來停止返回0值。 – ManoharSingh

+0

'exit()'也行,它們是別名。 –

回答

0

我認爲你錯過了這個鉤子。這實際上適用於未登錄的用戶。

add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); 
+0

它僅適用於管理員,因此未登錄的用戶對此部分並不重要。 但我做了一個乾淨的安裝,它再次工作。 我也認爲我找到了源代碼。我從if循環中調用了ajax。那裏有東西出錯了。如果我在循環外調用ajax,即使對於內部調用也是如此。 所以現在我已經以不同的方式實現了插件,這對我來說很有用。 但無論如何感謝您的幫助。 – Yerlix

0

我做了一個乾淨的安裝,它再次工作。我也認爲我找到了來源。我從if循環中調用了ajax。那裏有東西出錯了。如果我在循環外調用ajax,即使對於內部調用也是如此。所以現在我已經以不同的方式實現了插件,這對我來說很有用。

對不起,我沒有發佈這個更快,Stackoverflow沒有讓我。