2011-12-12 73 views
0

作爲this question的後續處理,我還有其他問題。Magento客戶編輯 - Ajax調用兩次

我的觀點看起來是這樣的:

<span id="tickets">?</span> 

<script type="text/javascript"> 
var url = '<?php echo Mage::helper("adminhtml")->getUrl("greenspan_tickets/index", array('customer_id' => $this->getRequest()->getParam('id'))); ?>'; 

function getTicketInfo(){ 
    new Ajax.Request(url, { 
     method: 'get', 
     onComplete: function(transport) { 
      var json = transport.responseText.evalJSON(); 
      document.getElementById('tickets').innerHtml = json.ticket_count; 
      alert(document.getElementById('tickets').innerHtml); 
     } 
    }); 
} 
getTicketInfo(); 
</script> 

用戶與「1」(正確的從JSON響應值)的正確值驚動兩次。然而,對於用戶來說,#tickets的值是仍然是只是「?」。

我做錯了什麼?

原因可能是這樣的:在頁面加載過程中,頁面本身當然會加載 - URL是沿着/index.php/admin/customer/edit/id/1/key/7a13c7d7c2feecc16003c82bbf0f6201/的行。如果我看螢火蟲或類似我看到了相同的請求被觸發一次,從而總共相同的請求被做兩次: double-loading see full image here

你能解釋一下什麼是錯的?我試着與另一家生產車間,我正在運行,這也導致雙重加載頁面。

+0

作爲一個方面說明,我建議不要放置javscript'url'變量在全球範圍內,而是在'getTicketInfo'函數內定義它。在全局範圍內放置任何變量是很危險的,尤其是那些具有諸如'url'這樣的通用名稱的變量,因爲頁面上其他書寫的JavaScript可能會覆蓋它。 – Max

+1

另一個需要注意的是,在Prototype中有一個'document.getElementById()'的快捷方式,它是$()' – Max

回答

0

有可能是一個問題,當加載該文檔,而調用AJAX的載事件

var url = '<?php echo Mage::helper("adminhtml")->getUrl("greenspan_tickets/index", array('customer_id' => $this->getRequest()->getParam('id'))); ?>'; 

function getTicketInfo() { 
    new Ajax.Request(url, { 
     method: 'get', 
     onComplete: function(transport) { 
      var json = transport.responseText.evalJSON(); 
      document.getElementById('tickets').innerHtml = json.ticket_count; 
      alert(document.getElementById('tickets').innerHtml); 
     } 
    }); 
} 

document.observe('dom:loaded', function() { 
    getTicketInfo(); 
}); 
+0

我試過了。不幸的是,它並沒有改變。該函數仍被調用兩次,並且屏幕上不更新#tickets innerHtml。 – phidah