2012-08-03 98 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

相關問題