Javascript:如何取消执行脚本

时间:2018-06-21 18:35:10

标签: javascript ajax canvas

我有一个包含画布的网页和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)?

0 个答案:

没有答案