Приведенный выше код не работает, потому что вы вернулись и присвоили строку <script type="text/javascript"> function XYZ() { //changing_body } XYZ();</script>
во внутренний HTML-код chart1
div, что не означает, что он создаст новый тег <script>
с переопределением функции.
Короче говоря, возвращаемое значение обрабатывается как обычная строка символов, и это неправильный способ добавления новых элементов в дерево DOM.
Более того, я смог воспроизвести его без использования .Netв нативном JavaScript, и вот пример: https://jsfiddle.net/qt1v6mof/
Чтобы получить ожидаемый эффект, вам обязательно нужно использовать функцию документа createElement , чтобы создать реальный <script>
элемент tag, а затем используйте appendChild для замены содержимого innerHTML
текущего div, как показано в следующем коде и примере:
<div id="chart">
<script type="text/javascript">
var getMyChart = function() { alert("wow!"); }
</script>
</div>
<button id="changeBtn">Change getMyChart's body</button>
<button id="callEndRequest">Call endRequestHandler</button>
function change() {
var newScript = document.createElement('script'),
chartElem = document.getElementById('chart')
chartElem.innerHTML = ''
newScript.setAttribute('type', 'text/javascript');
newScript.innerHTML = 'getMyChart = function() { alert("new body");}'
chartElem.appendChild(newScript)
}
function endRequestHandler () {
getMyChart()
}
changeBtn.onclick = change
callEndRequest.onclick = endRequestHandler
getMyChart()
Пример в реальном времени: https://jsfiddle.net/9mdeoLb2/
Надеюсь, это поможет вам.С уважением!