我有一个包含画布的网页和2 href链接,可以在画布中运行应用程序(应用程序1或应用程序2),如下所示:
var costs = costRepository.GetAll(); // <- 1 SELECT
var costIds = costs.Select(f => f.ID).ToList();
var payments = paymentRepository.GetAll().Where(f => f.CostType == 15 && costIds.Contains(f.CostId)) // <- 1 SELECT
// Some client side assignments.
foreach (CostTypeA costEntity in costs)
{
CostTypeAModel model = Map<CostTypeAModel>(costEntity);
model.Payments = Map<PaymentModel>(payments.Where(f => f.CostId = costEntity.Id));
...
}
单击href链接时,运行runApplication()函数,该参数是应用程序的js脚本。
这是runApplication()函数:
Some Markdown text.
<form action="http://someothersite.com/" method="post">
<P>
<label for="name">Name: </label> <input type="text" id="name"><br>
<label for="email">Email: </label> <input type="text" id="email"><br>
<input type="submit" value="Send">
</P>
</form>
More Markdown text.
在此函数中,当ajax检索应用程序的js脚本时,他使用eval()运行js脚本。
这是application-1.js:
<canvas id="canvas" style="border:solid black 1px;"></canvas>
<a href="javascript:runApplication('application-1.js')">Run application 1 on canvas</a>
<br><a href="javascript:runApplication('application-2.js')">Run application 2 on canvas</a>
这是application-2.js:
<script type="text/javascript">
//Function to run application :
function runApplication(jsFile)
{
xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4 && xhr.status == 200)
{
jsScript = xhr.responseText;
//Run the js script of application on canvas :
eval(jsScript);
}
}
//Retrieve js script of application :
xhr.open("POST", jsFile, true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("");
}
</script>
因此,当您单击第一个href链接以在画布上运行应用程序1时,它就起作用了(应用程序1的文本显示在画布上)。
然后,当您单击第二个href链接以在画布上运行应用程序2时,应用程序2在画布上运行(应用程序2文本显示在画布上),但是应用程序1仍在画布上运行,因此一个问题,因为我想取消执行application-1脚本并运行应用程序2而不是应用程序1。
那么如何取消js脚本的执行(取消application-1.js)?