我正在使用jQuery和countdown(jQuery插件)。我希望倒计时运行x秒,其中x是来自serverTime.php的整数。
问题 - 我无法弄清楚如何在函数getTime()中返回responseText,以便它可以在Timer函数中使用。
起初我尝试使用纯js(没有jQuery),我发现了类似的主题:
我遇到的一些想法/可能的解决方案:
计时器功能:
$(function (){
var time = getTime(); // time is an integer
$('#defaultCountdown').countdown({until: time, format: 'S', onExpiry: action});
});
getTime()检查serverTime.php并返回内容,该内容将是一个整数。 警报(html)工作,而返回HTML不起作用。我知道这是因为调用是异步的。
function getTime()
{
$.ajax({
url: "serverTime.php",
cache: false,
async: true,
success: function(html)
{
alert(html);
helperFunction(html);
return html;
}
});
}
helperFunction 即可。不幸的是,我不知道如何将结果传递给计时器功能。
function helperFunction(response)
{
return response;
}
serverTime.php
echo 30; // 30 seconds, just an example
我试图解释我的问题,并表明我已经花了一些时间。如果您需要其他信息,请询问。也许我只是在想错误的方向。
答案 0 :(得分:4)
您的代码未显示实际使用time
变量的位置。
最终,您无法从getTime()
函数返回AJAX响应,因为AJAX是异步,因此getTime()
将始终在响应之前返回接收
您最好将所需的任何代码传递到getTime()
函数...
function getTime( func )
{
$.ajax({
url: "serverTime.php",
cache: false,
async: true,
success: func // <--set the function received as the callback
});
}
// pass a function to getTime, to be used as the callback
function myFunc( html ) {
/* do something with html */
}
getTime( myFunc );
...或者从:success
回调中调用另一个函数,将响应传递给它......
function getTime( func )
{
$.ajax({
url: "serverTime.php",
cache: false,
async: true,
success: function( html ) {
someFunction( html ); // <--- call a function, passing the response
}
});
}
someFunction( html ) {
/* do something with html */
}
...或者只是将正确的代码硬编码到:success
回调中......
function getTime( func )
{
$.ajax({
url: "serverTime.php",
cache: false,
async: true,
success: function( html ) {
/* do something with html */
}
});
}
修改强>
我现在看到你想要使用time
的位置。你可以使用我上面的第二个例子。只需确保您创建的函数位于getTime()
函数可访问的变量范围内。
像这样:
$(function (){
getTime(); // get things started when the DOM is ready
});
function getTime() {
$.ajax({
url: "serverTime.php",
cache: false,
async: true,
success: function(html)
{
doCountdown( html ); // call doCountdown, passing it the response
}
});
}
// doCountdown receives the response, and uses it for the .countdown()
function doCountdown( time ) {
$('#defaultCountdown').countdown({until: time, format: 'S', onExpiry: action});
}
答案 1 :(得分:1)
因为您正在异步运行ajax,所以它在一个单独的线程中运行。这意味着您设置var time = getTime();
的位置没有设置。当ajax调用return html;
运行时,没有什么可以等待接收响应。原始线程已经完成运行,并且由于函数getTime()
未设置任何内容,time
将为空。
您可以将时间设置为全局变量,然后调用getTime()
,并设置ajax调用完成的时间 - 这一切都取决于您何时何地需要使用时间....
var time = 0;
$(function (){
getTime()
$('#defaultCountdown').countdown({until: austDay, format: 'S', onExpiry: action});
});
function getTime()
{
$.ajax({
url: "serverTime.php",
cache: false,
async: true,
success: function(html)
{
time = html;
}
});
}