2012-03-14 26 views
6

Tôi muốn triển khai một trang được hiển thị cho người dùng trong khi lệnh hệ thống được chạy. Ngay sau khi lệnh hoàn thành người dùng sẽ được chuyển đến một trang khác.Làm thế nào tôi có thể viết một trang tải với khung chơi

Một số chiến lược để thực hiện điều này là gì?

(Một giải pháp mà không cần javascript sẽ là lý tưởng)

Trả lời

4

Nó chắc chắn có thể được thực hiện. Bạn muốn xem Asynchronous programming with HTTP trong tài liệu, nó giải thích cách thực hiện điều này theo cách không chặn. Bạn sẽ cần một chút javascript cho phần chuyển hướng mặc dù.

Và tôi không biết ý bạn là gì với "lệnh hệ thống" nhưng bạn có thể muốn create a job cho nó, để bạn có thể kích hoạt nó với một yêu cầu. Sau đó, bạn có thể poll it cho đến khi hoàn tất và sau đó chuyển hướng người dùng. Nhưng thực sự tài liệu làm một công việc vô cùng tốt hơn trong việc giải thích nó sau đó tôi đang làm bây giờ.

Dưới đây là ví dụ về hành động điều khiển mà tôi cho rằng lệnh hệ thống của bạn trả về một số loại đầu ra Chuỗi cho người dùng. Khi công việc được hoàn thành, nó sẽ gửi một phản hồi cho người dùng, do đó kích hoạt trình xử lý thành công trong ví dụ javascript.

public static void executeSystemCommand(String input) { 
    Promise<String> outputPromise = new SystemCommandJob(input).now(); 
    String output = await(outputPromise); 
    renderText(output); 
} 

Về cơ bản nếu bạn đang sử dụng jQuery $.ajax bạn có thể sử dụng hoàn toàn các sự kiện để thăm dò ý kiến ​​các dữ liệu (chỉ cần làm theo yêu cầu một lần nữa nếu nó đã không thành công trong thời gian chờ) và sử dụng thành công /thực hiện sự kiện để chuyển hướng người dùng khi ứng dụng phản hồi để cho biết rằng "lệnh hệ thống" được thực hiện đang chạy.

Ví dụ về một hàm bạn có thể sử dụng:

function poll(){ 
    $.ajax({ 
     url: "/systemcommand", 
     success: function(data){ 
      // redirect to next page here 
      document.location.href = '/output' 
     }, 
     complete: poll, 
     timeout: 20000 
    }); 
}; 

Cũng a great example on long polling là trong javascript trên StackOverflow.

Các vấn đề liên quan