1

我有一个由下拉更改调用的函数。该功能可能正在运行并且用户更改了下拉菜单。

如果发生这种情况,我希望正在运行的功能停止。

前任。

$('.txtCategory').change(function(){
    ajaxPost('para', 'meters').stop(); //doesn't work
    $('#Submit').attr('data-check', 'on');
    $('#Submit').val('Stop Checking');
});

这可能吗?

提前致谢!

问候,圭多

4

4 回答 4

2

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

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

于 2012-12-04T11:30:50.007 回答
0

@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 :)
于 2012-12-04T11:33:59.580 回答
0

正如其他人提到的那样,由于它们都是同步过程,因此无法停止/中止另一个功能。另一方面,如果您想停止/中止 AJAX(第一个 A 代表Asynchronous)请求,您可以借助 jQuery 的 AJAX 返回对象来实现。为此,您可以按照以下步骤操作;

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

var xhr = null;

当您通过 AJAX 请求时,将返回对象分配给此变量;

xhr = $.ajax(
    url: "http://someurl.org",
    success: function() { ... }
    );

现在,当您需要中止请求时,只需xhr.abort()调用即可。

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

希望有帮助;

于 2012-12-04T11:40:59.967 回答
0

正如其他人所说,不可能从 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");
});
于 2012-12-04T11:45:12.557 回答