Ajax 请求在没有警报语句的情况下不起作用


Ajax Request dont work without alert statement

我在AJAX调用时遇到问题。我正在尝试访问HTML的输入表单元素,并将其写入具有PHP脚本的数据库。

我的JS代码看起来像这样。

function getWriteValues() {
    var x = document.getElementById("eingabemaske");
    var jqxhr = $.post( "source/form_handler.php", 
                         $( "#eingabemaske" ).serialize() );    
    alert( 'Eintragung erfolgreich durchlaufen' );
}

PHP 部分并不有趣,因为除了数据库插入之外什么都没有发生。

现在谈谈我的问题。该函数使它应该执行的操作。但是当我删除 alert() 语句时,什么也不起作用了。这意味着不会向数据库写入任何内容,并且无法进行 ajax 调用。我无法弄清楚问题出在哪里。我在 2.1.1 版中使用 jQuery。

当您单击提交按钮时,您可以:

  1. 运行 JS
  2. 发送 Ajax HTTP 请求
  3. 提交表格
  4. 离开当前页面
  5. 取消 Ajax HTTP 请求,因为不会有任何内容来处理它。

也:

  • 阻止提交按钮的默认操作,以便您不会离开页面
  • 摆脱JS并在表单action中指定的程序中插入数据库
如果

表单已提交,您是否调用getWriteValues()?如果是这样,请不要忘记返回 false;

  1. 签入您的html"name"属性是为每个表单元素定义的,或者不是因为serialize()采用元素名称及其值。
  2. 检查您是否在getWriteValues()中获取值
  3. 验证这些值是否传递给脚本form_handler.php。

样本:

<form id="eingabemaske">
    <input id="abc" name="abc" value="test" />
    <input type="button" id="submit" name="submit" value="Submit" />
</form>
<script type="text/javascript">
$(function(){
    $('#submit').on('click',function(e){
        e.preventDefault();
        getWriteValues();
    });
});
function getWriteValues() {
    console.log($( "#eingabemaske" ).serialize());
    var jqxhr = $.post( "form_handler.php", 
                         $( "#eingabemaske" ).serialize() );    
    //alert( 'Eintragung erfolgreich durchlaufen' );
}
</script>

在 PHP 脚本中

print_r($_REQUEST);

这可能是由于警报消息给 ajax 时间执行其工作。 请检查 Ajax 之前和之后发生的所有过程。此外,当您从提交按钮调用 ajax 时(我想您已经从表单的"onsubmit"属性调用了此函数),可能是它在 ajax 完成之前对表单进行子化。请在函数结束时返回 false,以便进一步停止函数处理。