2014-05-20 67 views
0
function getNewMonth(month, year, table) { 
    "use strict"; 
    var uri, newTable; 
    uri = 'ajax.php?m=' + month + '&y=' + year; 
    $.ajax({ 
     type: 'GET', 
     cache: false, 
     url: uri, 
     dataType: 'xml', 
     success: function (xml) { 
      newTable = document.importNode(xml.getElementsByTagName('table')[0], true); 
      $(table).replaceWith(newTable); 
     } 
    }); 
} 

我對ajax沒有太多的瞭解,但我知道服務器中的xml是與網頁不同的文檔的一部分。沒有找到jQuery的導入方式,我使用了標準的JS importNode。jQuery ajax xml導入節點到文檔中

當這個函數運行時,舊錶被替換爲新的,但它不被渲染。文本內容將顯示,但不會顯示在呈現的表格中。

檢查元素顯示所有標記都存在,但我嘗試過的兩個瀏覽器(FireFox和Midori)都不呈現表格。

我做錯了什麼?

服務器的響應是使用標準html表格和子節點的有效XML,並且由服務器上的完全相同的php代碼生成,該代碼生成它將被替換的呈現表 - 它只是一個不同的月份和年份。

顯然有一些我不理解在這裏。

我欣賞任何建議。

編輯 -

這裏是Ajax響應的樣子:

<?xml version="1.0" encoding="UTF-8"?> 
<table style="float: left; width: 800px; background: url('PNG/RitaCalendar.png') no-repeat bottom;" cellspacing="0px" class="sexycal" data-year="2016" data-month="7" data-ete="Mistress Rita" data-uri="http://www.kinkonomics.com/"> 
    <caption><span title="Previous Month">◀</span> July 2016 <span title="Next Month">▶</span></caption> 
    <tr height="40px"> 
    <th scope="col" valign="top" width="14.28%">Sunday</th> 
    <th scope="col" valign="top" width="14.28%">Monday</th> 
    <th scope="col" valign="top" width="14.28%">Tuesday</th> 
    <th scope="col" valign="top" width="14.28%">Humpday</th> 
    <th scope="col" valign="top" width="14.28%">Thursday</th> 
    <th scope="col" valign="top" width="14.28%">Friday</th> 
    <th scope="col" valign="top" width="14.28%">Saturday</th> 
    </tr> 
    <tr height="133px"> 
    <td valign="top" align="right"> </td> 
    <td valign="top" align="right"> </td> 
    <td valign="top" align="right"> </td> 
    <td valign="top" align="right"> </td> 
    <td valign="top" align="right"> </td> 
    <td class="data" valign="top" align="right">1</td> 
    <td class="data" valign="top" align="right">2</td> 
    </tr> 
    <tr height="133px"> 
    <td class="data" valign="top" align="right">3<br/><span class="mname"><a href="http://www.kinkadvisor.com/" target="_blank">Marilyn</a></span><br/><span class="wlist"><a href="http://www.amazon.com/registry/wishlist/43T049UULTFM" target="_blank">Wishlist</a></span></td> 
    <td class="data" valign="top" align="right">4</td> 
    <td class="data" valign="top" align="right">5</td> 
    <td class="data" valign="top" align="right">6</td> 
    <td class="data" valign="top" align="right">7</td> 
    <td class="data" valign="top" align="right">8</td> 
    <td class="data" valign="top" align="right">9</td> 
    </tr> 
    <!-- more of the same --> 
    <tr height="133px"> 
    <td class="data" valign="top" align="right">31<br/><span class="mname"><a href="http://www.fetishphonesexcalls.com/" target="_blank">EmmaJane</a></span><br/><span class="wlist"><a href="http://www.amazon.com/wishlist/2Y3GT6EEWXW20" target="_blank">Wishlist</a></span></td> 
    <td valign="top" align="right"> </td> 
    <td valign="top" align="right"> </td> 
    <td valign="top" align="right"> </td> 
    <td valign="top" align="right"> </td> 
    <td valign="top" align="right"> </td> 
    <td valign="top" align="right"> </td> 
    </tr> 
</table> 

如果它很重要,這是PHP

$xml = new DOMDocument("1.0", "UTF-8"); 
$xml->formatOutput = true; 

$reqmonth = dateObject($y, $m); 

$table = monthTable($db,$xml,$reqmonth); 
$xml->appendChild($table); 
header('Content-Type: application/xml'); 
//avoid caching 
header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in past 
print($xml->saveXML()); 
exit; 

monthTable()是使用相同的功能以原始服務的形式在網頁中生成表格。

+0

你能提供一個newTable看起來像什麼的例子嗎?它是一個標準的HTML表嗎? –

回答

0

它的工作原理,如果我這樣做是文本而不是XML的

function getNewMonth(month, year, table) { 
    "use strict"; 
    var uri, newTable; 
    uri = 'ajax.php?m=' + month + '&y=' + year; 
    $.ajax({ 
     type: 'GET', 
     cache: false, 
     url: uri, 
     dataType: 'text', 
     success: function (text) { 
      $('#caldiv').prepend(text); 
      $(table).remove(); 
      attachEvents(); 
     } 
    }); 
} 

所以似乎出於某種原因,importNode允許添加節點到DOM樹,但它不會觸發渲染刷新。但上面的作品,所以我會堅持。

相關問題