2015-12-04 70 views
1

我試着去更新後的小型車(cart_fragments)/上一個Ajax事件。它是這樣工作的。通過PHP或jQuery刷新cart_fragments(mini-cart)?

HTML觸發:

<a id="woomps-button-\'.$nr.\'" class="woomps-button" '.$ajax_url.' data-button-nr="'.$nr.'"> 

jQuery的要求:

jQuery(document).on('click', '.woomps-button', function() { 
    var nr= jQuery(this).data('button-nr'); 
    jQuery.ajax({ 
     url : subpost.ajax_url, 
     type : 'post', 
     data : { 
      action : 'woomps_update_nr', 
      security : subpost.security, 
      nr: nr 
     }, 
     success : function(response) { 
      window.alert(nr); 
      //MAYBE_code to refresh_fragments here 
      } 
    }); 
    return false; 
}); 

PHP應答:

function woomps_update_choosen_person() { 
    $p = $_POST['nr']; 
    if ($p == 1) {$x= "This must show in cart";} 
    WC()->session->set('woomps_limit_by_persons' , $x); 

    //MAYBE code to refresh_fragments here 
} 

而在迷你cart.php模板,我有在此基礎上計算領域。

$items_left_start = WC()->session->get('woomps_limit_by_persons')?: 3 ; 
//Do something something here 

所以此工程,但我需要刷新,當一個項目被添加到購物車像車。我的假設是,應該是來自jQuery的ajax請求,我可以放入成功塊?

I類(認爲)我想火就是這個WC_AJAX::get_refreshed_fragments();但是,這是從一個ADD_ACTION解僱,所以我想這add_action('wp_ajax_nopriv_woocommerce_get_refreshed_fragments', array('WC_AJAX', 'get_refreshed_fragments'));。但它也沒有效果。

我也嘗試喜歡它在add_to_cart按鈕的功能來創建一個jQuery的AJAX調用,但它既不工作。

//MAYBE_code to refresh_fragments here 
     var data = {}; 
     jQuery.post(
      wc_get_refreshed_fragments_params.wc_ajax_url.toString(). 
      replace('%%endpoint%%', 'get_refreshed_fragments'), data, 
      function(response){ 

      }) 

     } 

我不完全理解它是如何工作的,如果有人有一些指針或一個片段,我會這麼多它並欣賞。一段時間以來,這一直在與此結合。

回答

1

堆棧多struggeling this topic後幫助建立正確的代碼更新微型車的碎片。這是PHP和jQuery都需要的。

所以基本上你可以在你的PHP coode響應結束致電WC_AJAX::get_refreshed_fragments();如果它來自AJAX調用。它不會返回到你的PHP響應者代碼,所以把它放在最後。 PHP響應將在WC_AJAX::get_refreshed_fragments()內結束/發送回jQuery;所以你還需要創建一些響應這個jQuery。這是我從topic了:

var fragments = response.fragments; 

if (fragments) { 

       jQuery.each(fragments, function(key, value) { 
        jQuery(key).replaceWith(value); 
       }); 

      }