2011-12-12 45 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