【问题标题】:$.ajax is redirecting when not wanted$.ajax 在不需要时重定向
【发布时间】:2014-08-01 20:31:59
【问题描述】:

我对 ajax 很陌生,主要是今天。我有几个 HTML 表,用户可以在其中更改信息并更新数据库而无需重新加载页面,它第一次完美运行...

为了解释起见,我的网址是www.example.com/customers.php?action=viewAll

/************ Update Job Status ************/
$('.update-job-status').on('change', function() {
    var status = $(this).val();
    var id = $(this).parent().children('#id').val();

    var formData = "id="+id+"&status="+status;

    $.ajax({ // Start the PHP submission
                url : "/resources/submit.php?action=updateJobStatus",
                type: "POST",
                data : formData,
                success: function(data, textStatus, jqXHR) {    //data - response from server
                    $('.notification-success').css('display', 'block').append('Status was updated!');
                    $('.notification-success').fadeOut(2000, function(){
                        $(this).empty();
                    });
                }
            });
});

AJAX 返回并让我们保持在同一页面上 (www.example.com/jobs.php?action=viewAll)

现在我尝试调用 AJAX 对表执行不同的操作...

/************ Delete Job ************/
$('.delete-job').on('click', function() {
    var id = $(this).parent().children('#id').val();
    var formData = "id="+id;

    $.ajax({ // Start the PHP submission
                url : "/resources/submit.php?action=deleteJob",
                type: "POST",
                data : formData,
                success: function(data, textStatus, jqXHR) {    //data - response from server

                }

            });
});

在这里,AJAX 将我们返回到 jobs.php。为什么所有 $_GET 参数都被截断?我认为是这样,因为 URL 栏上写着.../jobs.php?(它仍然有问号)

关于它为什么不维护它的页面的任何想法?

【问题讨论】:

  • .delete-job 指的是没有type 属性的submit 或button 元素的按钮/元素吗?我假设正在发生的事情是正在提交表单。一个简单的测试可能是在您的 AJAX 调用之后简单地放置 return false。
  • 是的,它是一个按钮,没有类型。 <button class="btn delete-job">Delete</button>
  • 将type="button" 添加到元素中就可以解决问题了。默认情况下,form 中没有类型的button 会自动提交封闭的form。
  • 当您使用 POST 时,您不会在 URL 中输入? 后跟参数。您正在以一种无法正常工作的方式混合 GET 和 POST。
  • @developerwjk 那样做会有什么后果?

标签: php jquery ajax redirect parameters


【解决方案1】:

不带type 属性的button 元素被视为form 内的submit 元素。发生的事情是点击时,您的 AJAX 正在提交,但表单也是如此,因此正在重新加载您的页面。

一个简单的解决方法是让你的按钮有一个类型,比如:

<button type="button" class="delete-job">Delete</button>

【讨论】:

    【解决方案2】:

    如果您的整个页面正在重新加载,则可能是您的“删除作业”元素的默认操作正在触发。尝试更改这段代码:

    $('.delete-job').on('click', function(e) {
    
    e.preventDefault();
    
    the rest of your code...
    

    这将阻止执行元素的默认操作。

    【讨论】:

      猜你喜欢
      • 2015-08-23
      • 2015-12-20
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2015-07-01
      相关资源
      最近更新 更多