2012-08-03 101 views
3

为了整合一些SQL调用,我试图向服务器做一个查询,然后让客户端遍历每个结果。需要注意的是,在处理下一个结果之前,我需要等待用户输入。这可能吗?如何在服务器端查询后等待来自客户端的输入?

我具有类似于下面一个jquery呼叫:

$.post('functions/file_functions.php', {type: 'test', f: 'load'}, function(data) { 
    if (data.success) { 
     $.each(data.files, function() { 

      // Can I wait for user input at this point and then process the next 
      // file after a users interaction (e.g. a button click)? 

     }); 
    } 
}, "json"); 
+4

JavaScript是单线程的,所以没有。你可以做的就是将结果存储在适当范围的数组中,然后使用'click'事件处理程序来遍历它们。 – 2012-08-03 13:06:51

+0

好主意,这也会起作用 – Paul 2012-08-03 13:12:42

+0

在我的评论中扩充了一点答案,并且包含了代码的样子。 – 2012-08-03 13:14:44

回答

4

我要对我的评论扩大一点,并希望使其成为一个有用的答案。 JavaScript是单线程的,因此无法在等待其他事件(例如被点击的元素)发生时阻止函数的执行。相反,当AJAX POST请求成功返回时,您可以将文件列表存储到数组中,然后使用单独的事件处理程序循环它们(我假设每次点击获取一个文件)。

代码可能是这个样子:

$(function() { 
    var files, index = 0; 

    $.post('functions/file_functions.php', {type: 'test', f: 'load'}, function(data) { 
     if (data.success) { 
      files = data.files; 
     } 
    }, "json"); 

    $('.mybutton').click(function() { 
     if(files) { 
      var file = files[index++]; 
      // do something with the current file 
     } 
    }); 

}); 
+0

理论上单线程。直到你打开一个新窗口。 – 2012-08-03 15:03:26

0

的方式之一为具有“封闭”在JavaScript的用户输入是调用window.prompt(除其他像window.confirm,window.showModalDialog)。然而,它不是真正可定制的,你可能想要保存从服务器返回的data,并且具有某种基于用户输入事件的处理。

在代码中它是这样的:

var the_answer = window.prompt("What's the airspeed velocity of an unladen swallow?"); 
console.log(the_answer); 
+0

['window.showModalDialog'](https://developer.mozilla.org/en/DOM/window.showModalDialog)也是阻塞的。 – 2012-08-03 13:12:13

+0

当然,就像'提醒'和'确认'等等,但这不是真正用于获取用户输入。 – complex857 2012-08-03 13:21:46

+0

确认确实要求用户输入(虽然它只能有两个不同的值)。 'showModalDialog'可用于请求任何用户输入。在模态窗口内部,将'returnValue'设置为任意**值(例如数组),并将其传递给开启器。在Chrome中,实现有一个错误,但是它有一个[简单的解决方法](http://stackoverflow.com/a/10234548)。 – 2012-08-03 13:27:57

相关问题