Ich arbeite an einem Magento-Shop, der versucht, die Javascript-Ebene eines Widgets mit Hilfe von Prototype js framework zu codieren.Inline-Javascript wird von der AJAX-Antwort von Prototype JS Ajax.Request-Methode abgezogen
In meinem Grid.js Datei Aufruf AJAX ist Setup wie folgt aus:
loadTabContent: function(tab, tabType){
if(tab === undefined || tabType === undefined){
return this;
}
entityId = tab.id.split('-')[3];
request = new Ajax.Request(
this.tabContentLoadUrl,
{
method:'get',
onSuccess: this.onTabContentLoad.bind(tab),
onFailure: this.ajaxFailure.bind(this),
evalJS: true,
parameters: {
id: entityId,
type: tabType
}
}
);
}
Unten ist der Erfolg Handler:
onTabContentLoad: function(transport){
if(transport && typeof transport.responseText !== undefined){
try{
response = transport.responseText;
}catch (e) {
console.log('PARSE ERROR', e);
response = {};
}
entityId = this.id.split('-')[3];
tabType = this.id.split('-')[1];
if(response && $('tab-' + tabType + '-' + entityId + '-contents')){
$('tab-' + tabType + '-' + entityId + '-contents').update(response);
}
}
},
Der Inhalt für das div wird immer korrekt durch die AJAX-Aufruf aktualisiert aber es gibt einige Inline-JS in Antwort, die nicht funktioniert. Ich sehe, dass JavaScript-Schnipsel in Registerkarte Elemente (Chrom Entwickler-Tool) kann nicht einmal
Unten ist der Code, der die AJAX-Request auf Serverseite Griffe:
public function renderTabContentAction()
{
$entityId = Mage::app()->getRequest()->getParam('id');
if(! $entityId){
$this->getResponse()->setHeader('HTTP/1.0', '400', true);
$this->getResponse()->setBody('Invalid parameters provided.');
}
$tabType = Mage::app()->getRequest()->getParam('type');
if(! $tabType){
$this->getResponse()->setHeader('HTTP/1.0', '400', true);
$this->getResponse()->setBody('Invalid parameters provided.');
}
Mage::register('current_entity_id', $entityId);
Mage::register('current_tab_type', $tabType);
$tabHtml = $this->_getTabsHtml($entityId, $tabType);
$this->getResponse()->setHeader('HTTP/1.0', '200', true);
$this->getResponse()->setBody($tabHtml);
}
Unten finden Sie die Antwort, die bekommt übergeben onTabContentLoad AJAX-Handler:
<div class="vertical-tabs">
<div class="tabs">
<div class="tab" id="tab-vertical-137-2441">
<input type="radio" id="label-vertical-product-tab-137-2441" name="product-tab-group-137">
<label class="tabs-label" for="label-vertical-product-tab-137-2441">PG-10ml</label>
<div class="content" id="tab-vertical-137-2441-contents">
</div>
</div>
<div class="tab" id="tab-vertical-137-2442">
<input type="radio" id="label-vertical-product-tab-137-2442" name="product-tab-group-137">
<label class="tabs-label" for="label-vertical-product-tab-137-2442">PG-15ml</label>
<div class="content" id="tab-vertical-137-2442-contents">
</div>
</div>
</div>
</div>
<script type="text/javascript">
bulkOrderGrid.initVerticalTabs();
bulkOrderGrid.activateTab('2441', 'VERTICAL');
</script>
Sie, dass die SCRIPT-Tags in der Antwort gibt es zu sehen. Es ist nur, wenn der Inhalt aktualisiert wird mit Element.update Funktion entfernt es die SCRIPT-Tags. Das kann ich bis jetzt verstehen.
HINWEIS: true und Ajax.Request zusammen mit evalJS: Ich habe auch Ajax.Updater zusammen mit evalScripts verwendet wahrem.
Hier stecken geblieben. Jede Hilfe würde sehr geschätzt werden.
UPDATES:
Da ich Element.update Funktion bin mit dem Abschnitt zu aktualisieren. Die Ursache des Problems ist dieser Teil des Codes in prototype.js um Linie Nr. 2048. Ich kann sehen, dass es in js Debugger ausgeführt wird. Es wertet den JS-Code aus, entfernt aber auch die SCRIPT-Tags aus der Quelle. Kommentieren stripScripts funktioniert gut.
else {
element.innerHTML = content.stripScripts();
}
content.evalScripts.bind(content).defer();
Sie sind korrekt ** Element.update ** Skript-Tag entfernen. Du solltest ** Element.innerHTML ** verwenden –