DrupalAjax数据检索延迟
我有一个简单的点击功能,代码如下,但我似乎无法在第一次点击时获得数据DrupalAjax数据检索延迟,ajax,drupal,data-retrieval,delay,Ajax,Drupal,Data Retrieval,Delay,我有一个简单的点击功能,代码如下,但我似乎无法在第一次点击时获得数据 $.ajax({ type: 'POST', url: 'test/get/1', success: function (result) { testit = result; }, dataType: 'json', data: 'js=1' }); alert(testit); 在我的回调函数中,我只返回drupal_json('hello');但直到第二次才出现。例如,如果我单击该按钮,将不会发
$.ajax({
type: 'POST',
url: 'test/get/1',
success: function (result) { testit = result; },
dataType: 'json',
data: 'js=1'
});
alert(testit);
在我的回调函数中,我只返回drupal_json('hello');但直到第二次才出现。例如,如果我单击该按钮,将不会发生任何事情,但如果我再次单击它,它将发出“hello”警报。在有动态数据的情况下,它也会延迟一次单击。例如,假设第一次单击时应向1发出警报,第二次单击时应向2发出警报,依此类推。相反,第一次单击将不起任何作用,第二次单击将向1发出警报,第三次单击将向2发出警报,等等。你知道为什么会发生这种情况吗?谢谢。ajax中的
a
代表异步。因此,testit
将不会设置为ajax响应的结果,直到调用success:
函数(当ajax调用成功完成时)
如果希望它同步工作,还可以在jQuery的.ajax
选项中设置aysnc:false
,如下所示:
var testit = $.ajax({
type: 'POST',
async: false,
url: 'test/get/1',
dataType: 'json',
data: 'js=1'
}).responseText;
alert(testit);
在第二种方法中,所有javascript都将被延迟,直到ajax调用完成(通常非常慢)。我建议只在第一个示例的
success:
回调中执行代码。但是,您可能还需要创建一个错误:
回调,以防出现故障(否则您的回调可能永远不会被调用,因为没有成功)。这可能是因为AJAX请求没有阻止脚本。它会继续执行并发出请求,但不会等到结果返回后再执行下一行(您的警报)。因此,当它第一次点击警报时,没有提取任何数据,第二次它只有来自第一个请求的数据(第二个请求已启动,但尚未完成),依此类推
解决方案是将警报放入回调函数中,直到收到响应后才会执行该函数:
$.ajax({
type: 'POST',
url: 'test/get/1',
success: function (result) { alert(result); },
dataType: 'json',
data: 'js=1'
});
谢谢你的替代解决方案。不过,我以后确实需要使用该变量,因此我将使用异步解决方案。
$.ajax({
type: 'POST',
url: 'test/get/1',
success: function (result) { alert(result); },
dataType: 'json',
data: 'js=1'
});