2010-12-20 99 views
2

我發現下面的腳本顯然是用javascript框架原型編寫的。jquery的javascript框架原型

Event.observe(window, 'load', function() { 

    Event.observe('btnSubmit', 'click', purchaseCD); 

    connectToServer(); 
}); 

function connectToServer() 
{ 
    new Ajax.Updater(
     { success: 'CD Count', failure: 'errors' }, 
     'server_side.php', 
     { 
      method:  'get', 
      onSuccess: function(transport) 
      { 
       if (parseInt(transport.responseText)) connectToServer(); 
      } 
    }); 
} 

function purchaseCD() 
{ 
    new Ajax.Updater(
     { success: 'CD Count', failure: 'errors' }, 
     'server_side.php', 
     { 
      method:  'get', 
      parameters: { num: $('txtQty').getValue() } 
    }); 
} 

是否有人能夠將此腳本轉換爲使用jQuery而不是原型?我根本不知道原型,所以我不明白。

回答

2

Ajax.Updater需要,作爲參數1,兩個容器到其將更新的參數提供給URL請求的成功或失敗的響應2.

這是什麼腳本是在頁面加載(我翻譯它下面的DOMReady是不完全一樣的,但jQuery約定)AJAX請求發送到server_side.php。如果它得到一個它理解的響應,它會立即發送另一個請求,以保持會話的活躍。

這看起來像一個可怕的設計。如果你打算做這樣的事情,你肯定希望在請​​求之間有一個超時。

這個腳本的另一個不完美的地方是每個AJAX請求都由同一頁面處理 - 依靠不同的參數來指導執行什麼操作。簡單地爲不同的操作請求不同的頁面會更清晰。

$(function() { 
    $('#btnSubmit').click(purchaseCD); 
    connectToServer(); 
}); 

function connectToServer() { 
    $.ajax({ 
     url: "server_side.php", 
     success: function(res) { 
      $('#CD Count').html(res); 
      if(parseInt(res)) 
       connectToServer(); 
     }, 
     error: function(xhr) { 
      $('#errors').html(xhr.responseText); 
     } 
    }); 
} 

function purchaseCD() { 
    $.ajax({ 
     url: "server_side.php", 
     success: function(res) { 
      $('#CD Count').html(res); 
     }, 
     data: { num: $('#txtQty').val() }, 
     error: function(xhr) { 
      $('#errors').html(xhr.responseText); 
     } 
    }); 
} 
+0

我的服務器的連接時間超出了120秒。這可以嗎? – oshirowanen 2010-12-20 15:14:25

+1

@oshiro:我沒有評論實際請求的超時時間,而是請求之間的延遲*。在原始代碼中,如果'connectToServer'按照它應該完成的時間,合理地在幾毫秒內完成,它將立即*觸發另一個到'connectToServer'的請求。這會給你的Web服務器帶來壓力。在上面的代碼中,'if(parseInt(res))'後面對'connectToServer'的調用應該用'setTimeout(connectToServer,10000)'來替換;'每10秒鐘只調用一次,而不是每次調用幾次第二。 – 2010-12-20 15:20:42