Javascript 从另一个函数停止函数-jQuery

Javascript 从另一个函数停止函数-jQuery,javascript,jquery,function,Javascript,Jquery,Function,我有一个通过下拉更改调用的函数。可能是函数正在运行,用户更改了下拉列表 如果发生这种情况,我希望正在运行的函数停止 前 这可能吗 提前谢谢 问候, Guido这是不可能的,原因很简单:脚本只在一个线程上执行,一次只能运行一个函数 在当前函数完成执行之前,不会调用响应本地事件或查询的任何回调。@Guido 我想你还需要别的东西。。请更好地解释你的问题。。。我认为这不是你真正想要达到的 你也可以用这些 Create a setTimeOut function call and run it ever

我有一个通过下拉更改调用的函数。可能是函数正在运行,用户更改了下拉列表

如果发生这种情况,我希望正在运行的函数停止

这可能吗

提前谢谢

问候,
Guido

这是不可能的,原因很简单:脚本只在一个线程上执行,一次只能运行一个函数

在当前函数完成执行之前,不会调用响应本地事件或查询的任何回调。

@Guido

我想你还需要别的东西。。请更好地解释你的问题。。。我认为这不是你真正想要达到的

你也可以用这些

Create a setTimeOut function call and run it every 1000ms so whenever you want to
stop that setTimeOut function you can simple use clearTimeOut to stop it.
it will help you out. if you have still any issues let me know :)

正如其他人提到的,不可能停止/中止另一个函数,因为它们都是同步进程。另一方面,如果要停止/中止AJAX(首先是异步)请求,可以借助jQuery的AJAX返回对象来完成。要做到这一点,您可以遵循以下步骤

首先创建一个全局变量来处理AJAX对象

var xhr = null;
当AJAX请求时,将返回对象分配给该变量

xhr = $.ajax(
    url: "http://someurl.org",
    success: function() { ... }
    );
现在,当您需要中止请求时,只需调用
xhr.abort()
即可

if (xhr != null)
    xhr.abort();

希望有帮助

正如其他人所说,在JavaScript中不可能从另一个函数中停止一个函数

但是,您可以使用标志来检查Ajax请求是否正在运行。为此,jQuery具有非文档化的
$.active
属性。您可以按如下方式使用它:

$(".txtCategory").change(function() {
    if ($.active > 0)    // if there are more than 0 Ajax requests running
        return false;    // at a time we stop executing the current callback

    ajaxPost("para", "meters");
    $("#Submit").data("check", "on").val("Stop Checking");
});

显示调用另一个函数的位置如果有回调,例如在ajax成功中,可以设置一个标志并检查标志值,以查看是否可以处理数据或值是否已更改。但这是“停止”函数所能做到的。好吧,你只能出于好奇:你确实意识到
ajaxPost().stop()
有效地调用
ajaxPost
,并对该函数的返回值应用
stop
方法,对吗?因此,从逻辑上讲,您不能以这种方式停止
ajaxPost
,因为只有在
ajaxPost
完成后才会调用
stop
方法returned@EliasVanOotegem这是合乎逻辑的,这就是为什么我在其背后评论“不起作用”。@Guidoviser:只是想确保您知道这是您所写内容中的一个根本缺陷。我并不想让人觉得自己像个迂腐的git(虽然有时我也会这样),是的,我想到了“dropdown change”函数中的一个setTimeOut,该函数检查更改,如果更改,就会退出该函数。这不是一个好主意,但它是可行的。
$(".txtCategory").change(function() {
    if ($.active > 0)    // if there are more than 0 Ajax requests running
        return false;    // at a time we stop executing the current callback

    ajaxPost("para", "meters");
    $("#Submit").data("check", "on").val("Stop Checking");
});