Ajax.PeriodicalUpdater没有根据频率更新

时间:2018-07-25 13:19:22

标签: javascript ajax prototypejs

以下代码不会根据频率进行更新; 一开始只是更新一次       

  new Ajax.PeriodicalUpdater('message_field', "http://localhost:8888/lsl_application/php/update_message_field.php?"+param, {
            method: "GET",
            frequency: 2,
            decay: 1,
            onSuccess: onSuccess_forPeriodic,
            onFailure: function(xhrResponse){
                alert("Failed to update!"+xhrResponse.statusText);
            }
        });

2 个答案:

答案 0 :(得分:0)

您好,根据您的问题,我已按照以下示例进行了申请。看来您的Web服务/ API需要一些时间来处理您的请求。

请尝试按以下示例运行,您可能会对问题有答案。

  

我的客户代码Index.php,每秒请求一次。

public static void getadminName(){
        String[] name= new String[20];
        for (int count=0;count<name.length;count++){
            name[count]= JOptionPane.showInputDialog(null,"Please enter 
            admin's name:");
            String scount=Integer.toString(count);
            name[count]= scount+1;
            break;
        } 
    } 
  

服务器代码,time.php,Web服务/ API逻辑。

[HttpPost]
    public async Task<IActionResult> Register([FromBody]UserModel model)
    {

        IdentityResult result;

        if (!ModelState.IsValid) return BadRequest(ModelState);

        var user = new ApplicationUser { UserName = model.UserName, Email = model.UserName };

             result = await _userManager.CreateAsync(user, model.Password);

        if (! result.Succeeded) return  BadRequest(ModelState);

        return Ok(new {userCreated=true, userName= model.UserName });
    }

 [HttpPost("login")]
    public async Task<IActionResult> Login([FromBody]UserModel loginViewModel)
    {
        if (ModelState.IsValid)
        {
            var userFound = await _userManager.FindByNameAsync(loginViewModel.UserName);

            if (userFound == null) return Unauthorized();

            var userId = userFound?.Id;

            // Claims, we endow this user
            var claims = new[]
            {

            new Claim(Helpers.Constants.Strings.JwtClaimIdentifiers.Id, userId),
            new Claim(Helpers.Constants.Strings.JwtClaimIdentifiers.Rol, Helpers.Constants.Strings.JwtClaims.ApiAccess),
            new Claim("test2", "test2")
         };


            // Get options from app settings
            var options = _configuration.GetSection(nameof(JwtIssuerOptions));

            SymmetricSecurityKey _signingKey =  new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration["SecretKey"]));

            // Configure JwtIssuerOptions


            var token = new JwtSecurityToken
            (
                issuer: options[nameof(JwtIssuerOptions.Issuer)],
                audience: options[nameof(JwtIssuerOptions.Audience)],
                claims: claims,
                expires: DateTime.UtcNow.AddMinutes(60), // token works 1 hour! (then invalidates)
                notBefore: DateTime.UtcNow,
                signingCredentials: new SigningCredentials(_signingKey, SecurityAlgorithms.HmacSha256)
            );

            return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });
        }

        return BadRequest();
    }
  

注意:请查看浏览器的网络。我的频率为1,而每5秒回答一次。

enter image description here

答案 1 :(得分:0)

根据文档http://api.prototypejs.org/ajax/Ajax/PeriodicalUpdater/,频率是代码在第一个请求结束到下一个请求开始之间等待的时间。

例如,您期望的是这个

function poll()
{

    //function body

}

setInterval(poll,2000);

但这Ajax.PeriodicalUpdater的作用是

function poll()
{

    //function body

    setTimeout(poll,2000);
}

poll();

等待直到第一个(上一个)请求完成的好处是,无论后端进程运行多快,UI都不会每2秒锤击一次后端代码。特别是如果后端进程需要2秒钟或更长时间来处理,它将导致请求堆积。

我还相信您可能使用不正确,因为Ajax.PeriodicalUpdater只是Ajax.Updater的包装器,它可以为您更新内容。由于看不到您的其余代码,我可能是错的。您提供的代码段应使用URL请求的响应来更新ID为message_field的元素。在onSuccess事件之后的onComplete事件触发该内容更新。因此,如果URL响应没有像Jenish Zinzuvadiya的回答中那样变化,那么您会看到这种行为。

希望我能提供帮助。