2010-12-20 56 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