【问题标题】:Why is code in AJAX success call is not working?为什么 AJAX 成功调用中的代码不起作用?
【发布时间】:2017-05-05 03:54:11
【问题描述】:

我有一个 AJAX 脚本来将表单中的数据插入 MySQL 数据库。这是 AJAX。

<!-- SUBMIT FORM VIA AJAX -->
$("#f_product").on('submit',function(event){ 
    event.preventDefault();

    data = $(this).serialize();

    $.ajax({
    type: "POST",
    url: "<?php echo site_url('con_product/ins_product'); ?>",
    data: data
    }).success(function() {
        alert("Products list is ready to be printed");
        window.open("<?php echo site_url('con_product/print_product'); ?>","_blank");
        window.open("<?php echo site_url('con_product/form_product'); ?>","_self");
    });
});
<!-- END SUBMIT FORM VIA AJAX -->

AJAX 脚本成功将数据从表单插入到数据库。但不知何故,成功的脚本不起作用。为什么?

这个 AJAX 的行为是:

  • 将数据插入数据库 - 成功
  • 显示警报
  • 打开新页面以供打印。
  • 将当前页面刷新为新表单。

【问题讨论】:

  • 您必须告诉我们当前和预期的行为是什么。我们不知道“不起作用”意味着什么。
  • 好吧,警报没有出现。不打开新页面进行打印,也不刷新当前页面。
  • done/fail/always/then 是应该在 deferred 之外使用的选项。 success 将用作 ajax 的参数。
  • 检查浏览器开发工具是否有错误
  • 并添加一个错误处理程序,因为调用并不总是成功。

标签: javascript php jquery mysql ajax


【解决方案1】:

successcallback 函数的名称,而不是 promise

你应该使用:

$.ajax({
    type: "POST",
    url: "<?php echo site_url('con_product/ins_product'); ?>",
    data: data,
    success: function() {
        alert("Products list is ready to be printed");
        window.open("<?php echo site_url('con_product/print_product'); ?>","_blank");
        window.open("<?php echo site_url('con_product/form_product'); ?>","_self");
    }
});

或者done 承诺:

$.ajax({
    type: "POST",
    url: "<?php echo site_url('con_product/ins_product'); ?>",
    data: data
}).done(function() {
    alert("Products list is ready to be printed");
    window.open("<?php echo site_url('con_product/print_product'); ?>","_blank");
    window.open("<?php echo site_url('con_product/form_product'); ?>","_self");
});

【讨论】:

  • 我使用萤火虫,它说 jquery 未定义。 jquery.form.js
  • 所以如果你没有 jquery,你就不能使用它:) 确保你从正确的路径加载了 jquery 库。
  • 但是为什么数据插入正确?
  • 也许您的代码中的其他地方还有其他错误,导致您出现这种情况
  • @ashura91 由于您没有加载 jQuery,$("#f_product").on('submit',function(event){ 不会执行任何操作,因此您可以正常提交表单。我假设表单的 action URL 与您发送 AJAX 请求的 URL 相同。
【解决方案2】:

我不确定是否有.success 功能。但是你可以试试这个:

$.ajax({
    type: "POST",
    url: "<?php echo site_url('con_product/ins_product'); ?>",
    data: data,
    success: function(){
        alert("Products list is ready to be printed");
        window.open("<?php echo site_url('con_product/print_product'); ?>","_blank");
        window.open("<?php echo site_url('con_product/form_product'); ?>","_self");
    }
});

【讨论】:

  • 检查我的答案
  • @Dekel - 检查文档后,有,但不再推荐,因为该功能已被弃用
【解决方案3】:

根据http://api.jquery.com/jquery.ajax/

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调从 jQuery 3.0 开始被删除。您可以改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

如果您将success 替换为done 会怎样?

否则,success 应该是您投入到 $.ajax({...}) 中的对象的属性,其值是匿名函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2017-06-11
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多