Ajax后调用无法在移动设备上工作

Ajax post call not working on mobile

本文关键字:工作 移动 调用 Ajax      更新时间:2023-09-26

rails和ajax新手。

我创建了一个小的网络应用程序,用户只需按下一个按钮就可以计算他们的步数。完成后,用户单击提交并保存步骤数。

这一切在我的电脑上都很好。然而,当我在手机上尝试时,步骤数不会被保存。我不明白为什么会这样。

我的代码如下:

<script type="text/javascript">
$(document).ready(function(){
var index = 0;
function resetcounter() {
  index = 0;
  document.getElementById("button1").value = index;
}
function count(){
  index += 1;
  document.getElementById('button1').value=index;
}
$('#button1').click(function() {
    count();
});
$('#resetButton').click(function() {
    resetcounter();
});
$('#submitButton').click(function(e){
  e.preventDefault();
  e.stopImmediatePropagation();
    $.ajax({
      url : "/steps",
      type: "POST",
      data: {
        step: {
          stepcount: index
        }
      },
      success: function( data, textStatus, jQxhr ){ $('#response pre').html( data ); }, 
      error: function( jqXhr, textStatus, errorThrown ){ console.log( errorThrown ); }
    });
    window.location = '/steps';
  });
});

<div class="panel panel-default center">
  <div class="panel-heading">
    <h2>Count your steps</h2>
  </div>
  <div class="panel-body">
<input type="button" class="btn btn-default btn-circle" id="button1" value="0"/>
  </div>
  <div class="panel-footer">
    <button type="button" id="submitButton" class="btn btn-default ">Submit</button>
    <button type="button" id="resetButton" class="btn btn-default">Reset</button>
  </div>
</div>

代码的问题是在AJAX请求有机会完成之前重定向用户(导致行为不稳定)。

如果您对使用当前实现一筹莫展,可以通过将window.location重定向移动到成功回调内部来解决此问题,这样它只会在AJAX响应成功返回时进行重定向。

$('#submitButton').click(function (e) {
    e.preventDefault();
    e.stopImmediatePropagation();
    $.ajax({
        url: "/steps",
        type: "POST",
        data: {
            step: {
                stepcount: index
            }
        },
        success: function (data, textStatus, jQxhr) {
            $('#response pre').html(data);
            window.location = '/steps';
        },
        error: function (jqXhr, textStatus, errorThrown) {
            console.log(errorThrown);
        }
    });
});

您在移动设备上看到这种行为的原因是,AJAX请求在慢速连接上执行的时间更长,因此在脚本重定向之前成功调度的机会更少。

然而,正如我在评论中提到的,您试图实现的并不需要AJAX。您可以同步POST具有相同数据的HTML表单,用户不会知道其中的区别。