2016-03-21 150 views
2

關於此主題有很多堆棧溢出問題,但沒有一個對我有用。AJAX成功後刷新Div

這可能是由於我需要刷新div以調整信息時調用的PHP函數。

我有一個#tab-project-CD-smt_test div顯示三個版本(生產,分期和最新)。用戶可以點擊分段或最近的箭頭將其向上移動。我有這部分做工精細通過使用AJAX請求:

function sendToStaging (dir, type, subtype, version) { 
     //Need selected category, selected type, selected subtype 
     $.ajax({ 
      type: 'POST', 
      url: 'configs.php', 
      data: 'function=sendToStaging'+'&dir='+dir+'&type='+type+'&subtype='+subtype+'&version='+version, 
      success: function() { 
//     window.location.reload(true); 
       $('#deployed').load(document.URL); 
      } 
     }); 

    }; 

    function sendToProduction (dir, type, subtype, version) { 
     //Need selected category, selected type, selected subtype 
     $.ajax({ 
      type: 'POST', 
      url: 'configs.php', 
      data: 'function=sendToProduction'+'&dir='+dir+'&type='+type+'&subtype='+subtype+'&version='+version 
     }); 

成功時,我想刷新#deployed格,這是我的PHP makeInfoSection創建。其中摘錄低於:

// list latest, staging, production 
$html .= '<h4>Deployed Versions</h4>'; 
$html .= '<ul class="list-group" id="deployed">'; 

$html .= '<li class="list-group-item">'; 
$html .= '<span class="badge">production</span>'; 
$html .= $production.'</li>'; 

$html .= '<li class="list-group-item">'; 
$html .= '<span class="badge"><a href="#" style="color:orange"><span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToProduction('."'$dir', '$type', '$subType', '$staging'".')"></span></a></span>'; 


$html .= '<span class="badge">staging</span>'; 
$html .= $staging.'</li>'; 

$html .= '<li class="list-group-item">'; 
$html .= '<span class="badge"><a href="#" style="color:orange"><span class="glyphicon glyphicon-arrow-up" aria-hidden="true" onclick="sendToStaging('."'$dir', '$type', '$subType', '$latest'".')"></span></a></span>'; 



$html .= '<span class="badge">latest</span>'; 
$html .= $latest.'</li>'; 
$html .= '</ul>'; 

的方法是所謂的HTML:

<div class="col-md-5 col-md-push-1 col-sm-6"> 
     <div id="tabs" class="tab-content" style="padding:0em 0em 0em 1em"> 
      <?php 
       foreach ($project_types as $type) { 
        // @TODO remove once folder structure is all setup 
        if ($type !== 'CD') continue; 

        foreach ($project_subtypes[$type] as $subType) { 
         $html = "<div role ='tabpanel' class='tab-pane'"; 
         $html .= "id='tab-project-".$type."-".$subType."'>"; 
         $html .= makeInfoSection($type, $subType, $project_versions[$subType], $project_dir); 
         $html .= "</div>"; 
         echo $html; 
        } 
       } 

       foreach ($workflow_types as $type) { 
        foreach ($workflow_subtypes[$type] as $subType) { 
         $html = "<div role ='tabpanel' class='tab-pane'"; 
         $html .= "id='tab-workflow-".$type."-".$subType."'>"; 
         $html .= makeInfoSection($type, $subType, $workflow_versions[$subType], $workflow_dir); 
         $html .= "</div>"; 
         echo $html; 
        } 
       } 
      ?> 
     </div> 
    </div> 
</div> 

所以於AJAX的成功,我需要這個被刷新。我試過$('#tab-project-CD-smt_test').load(document.URL);,但似乎沒有做任何事情。我也嘗試調用makeInfoSection方法,但不將它添加到HTML,所以我並不感到驚訝,它沒有工作:

$approved_functions = array('sendToProduction', 'sendToLatest', 'sendToStaging'); 
if(array_key_exists('function', $_POST) && in_array($_POST['function'], $approved_functions)) { 
    // call the approved function 
    $dir = $_POST['dir']; 
    $type = $_POST['type']; 
    $subType = $_POST['subtype']; 
    $version = $_POST['version']; 
    $_POST['function']($dir, $type, $subType, $version); 
    makeInfoSection($type, $subType, $versions, $dir); 
} 

如何得到這個div刷新任何想法?

+2

我看到的一個問題是,您將在HTML中至少兩次具有相同的'id'''''部署。 'makeInfoSection'函數將'id ='deployed''硬編碼到它中。當您嘗試更新特定的div時,這會是一個問題,因爲'id's應該是唯一的。 – Keeleon

+0

爲獲得一些PHP呈現的HTML,當前頁面的AJAX加載非常常見。我認爲你已經接近['.load'](http://api.jquery.com/load/)函數,但是當你調用它時,我相信它會嘗試加載整個頁面。根據它的文檔,你可以試試'$('#deployed')。load(document.URL +'#deployed');'這應該只帶''deployed' div並覆蓋當前'#define'的innerHTML div在你的DOM。 – romellem

+0

@ Keeleon,這是真的,它被多次使用。它在div#tab-project-CD-smt_test下。所以我想我會想刷新那個div。 –

回答

2

@tibsar,您提到#deployed在您的頁面中並不是唯一的。 While you should try to avoid this,回答你的問題,你提到#tab-project-CD-smt_test獨特的,所以ajax加載應該適合你。

如果您想使用.load,試試這個在您的success回調:

$('#tab-project-CD-smt_test').load(document.URL + ' #tab-project-CD-smt_test'); 

讓我們知道,如果工程。

+0

我使用你的答案,但當加載div id或類自動添加另一個相同的div 。所以你能幫助我嗎? –