2011-03-08 49 views
1

我需要創建一個小部件,在其中可以輸入一些文本,並且我的服務器api.example.com可以執行並回應。事情是,我需要在客戶端獲得最終的「完成報告」之前多次撥打我的服務器。我目前有以下代碼。如何在一次提交後創建多個JSONP調用

$('#widget-form').submit(function() { 
     var jqxhr = $.ajax({ 
      url: "/startanalyzerp?string=someexampletext", 
      crossDomain: true, 
      dataType: 'json' 
     }) 
     .success(function(report) { 
      alert("success"+report.id); 
     }) 
     .error(function() { 
      alert("error"); 
     }) 
     .complete(function() { 
      alert("complete"); 
     }); 

什麼/ startanalyzerp確實是返回一個唯一的ID(整數),這是我需要傳遞給後續的URL。我有這個整數與report.id的值。

我想要做的是調用其他功能crossdomain

/step2?id=report.id 
/step3?id=report.id 
/step4?id=report.id 

我已經能夠做到這一點上使用相同的域:

$.each(endpoint_array, function(index,value) { 
    $.getJSON(value,function(report) { 
}); 

凡endpoint_array是我想叫什麼端點爲了一個簡單的數組。

我很想在這方面得到任何幫助,我敢肯定它簡直就是我想念的東西。

回答

1

兩個選項,我可以看到:

1 - 只有從阿賈克斯執行一個電話,使用的HttpRequest /捲曲樣式的命令,然後發回「已完成報告」作爲響應初始Ajax請求執行其他服務器端。

2 - 鳥巢Ajax請求:

$('#widget-form').submit(function() { 
     var jqxhr = $.ajax({ 
      url: "/startanalyzerp?string=someexampletext", 
      crossDomain: true, 
      dataType: 'json' 
     }) 
     .success(function(report) { 
      alert("success"+report.id); 

       var jqxhr = $.ajax({ 
       url: "/startanalyzerp/step2?string=someexampletext", 
       crossDomain: true, 
       dataType: 'json' 
      }) 
      .success(function(report) { 
       alert("success"+report.id); 
       //Call step 3 and so on 
      }) 
      .error(function() { 
       alert("error step 2"); 
      }) 
      .complete(function() { 
       alert("complete step 2"); 
      }); 
     }) 
     .error(function() { 
      alert("error"); 
     }) 
     .complete(function() { 
      alert("complete"); 
     }); 
+0

如果我要使用#1,我將如何使用我正在檢查的內容更新客戶端?難道它只是一個隨機計時器嗎?如果是這樣,那麼當我等待一個請求完成時,我將如何更新進度條? – 2011-03-08 15:19:07

+0

另外,如果我使用#2,它最終會成爲一些非常毛茸茸的和嵌套的東西嗎?沒有簡單的方法在$ .each循環中編寫它? – 2011-03-08 15:20:05

+0

Ajax的要點是它是異步的(你可以讓它同步我相信,但我也相信,它不推薦,因爲我認爲它可以鎖定你的瀏覽器,當它處理) - 通過回調函數鏈接你的請求是一個確保代碼在ajax請求完成後執行的標準方法(這就是Success回調的要點)至於你的第一條評論 - 你將返回必要的數據作爲來自1個Ajax請求的響應(很可能是JSON),生成此數據的邏輯將在服務器端腳本中執行。 – Rob 2011-03-08 21:31:57

0

有同樣的問題,並剝奪了服務器端的建議是不錯的:)

現在jquery.when介紹,人們可以等待延遲執行的對象。 Read onthis

相關問題