2014-12-24 33 views
0

我有以下要求中止或標記一個Ajax請求一旦瀏覽器收到200 OK

// =============================================== start() 
// 
// clicked_button : the user click the start button. 
// app_path  : the app path 
// 
// return none. 
// 
var start = function(clicked_button, app_path) { 

    $.ajax({ 
     type: 'POST', 
     data: { 'app_path': app_path }, 
     url: '/app/start', 
     context: clicked_button, 
    }) 

    .done(function(data) { 
     console.log(data); 
     $(this).removeClass('btn-success'); 
     $(this).addClass('btn-danger'); 
     $(this).text('stop'); 
    }) 

    .fail(function(data) { 
     console.log('failed to start the app: ' + data); 
    }) 
}; 

請求被髮送到服務器,並運行完全完成,我測試過它,則瀏覽器接收200 OK,我檢查了它,但不知怎的,.done函數中的代碼沒有執行,就像請求尚未完成。

我該如何檢查瀏覽器是否收到200 OK,然後放棄ajax調用,並繼續jQuery代碼。

回答

1

你不需要那樣做。

你可以在ajax中使用成功函數。

$.ajax({ 
     type: 'POST', 
     data: { 'app_path': app_path }, 
     url: '/app/start', 
     context: clicked_button, 
     success: function(data){ 
      console.log(data); 
      $(this).removeClass('btn-success'); 
      $(this).addClass('btn-danger'); 
      $(this).text('stop'); 
     }, 
     error: function(data){ 
      console.log('failed to start the app: ' + data); 
     } 
    }) 

試試這個代碼,並檢查你的螢火蟲的任何問題!

+2

我正要推薦相同的,然後我發現這個答案:http://stackoverflow.com/questions/8840257/jquery-ajax-handling-continue-responses-success-vs-done這就是說,這樣做是首選的方式。 (雖然我不知道爲什麼它不工作) – fodma1

+0

我用過它,還是一樣,瀏覽器確實收到200 OK,服務器端操作成功完成,數據更新了,但是裏面的代碼沒有執行成功或完成。 –

+0

該代碼是可用的github上,請任何想法可以有所幫助https://github.com/oussamaelgoumri/appRunner/blob/master/app/eo/src/js/app.js –

0

使用數據類型:「JSON」爲了獲得服務器響應

+0

我不從服務器請求任何數據,我只需要執行一些PHP代碼。 –

+0

然後使用獲取api響應url:'/ app/start', – khaliq

+0

感謝您的幫助,上面我已經提到過我是如何解決這個問題的,您有什麼想法可以改進我的解決方案嗎? –

0

我加上幾行到我的PHP代碼解決了這個問題:

sleep(1); 
return Redirect::home(); 

爲什麼呢?

調試代碼之後,它看起來像一切,我要求完成操作,所以唯一的問題是,該請求被掛起,或失去了回來的路上,不知爲什麼...

我最好的建議是因爲我在我的代碼上使用proc_open ..

仍然不是最好的解決方案,但它工作,我很高興。

相關問題