$ .post()为什么我没有得到警报?

时间:2015-01-15 20:06:39

标签: javascript jquery ajax

我不会将2个值传递给jsp页面并返回一些数据我用警报测试它并且我的值是正确的而没有$ .post()

function deleteFunction(courseId, userId) {
    $.post('../controlers/doDelete.jsp', {courseId: courseId, userId: userId}, function (data) {
      alert("somthing here");  
    });
    
    location.reload();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<span onclick="deleteFunction('<%=c.getCourse_id()%>','<%=me.getId()%>');">click me</span>

2 个答案:

答案 0 :(得分:6)

在该位置使用location.reload();将在返回AJAX调用之前重新加载页面。 $.post()生成异步操作。也就是说,调用将触发服务器,并且脚本在等待返回时继续执行。

如果您希望此次调用在 页面重新加载之前返回 ,请尝试以下代码:

function deleteFunction(courseId, userId) {
    $.post('../controlers/doDelete.jsp', {courseId: courseId, userId: userId}, function (data) {
        alert("somthing here");
        location.reload();
    });
}

传递给$.post()的函数是在 返回ajax调用后 发生的回调。通过将location.reload();添加到回调函数,您可以完成调用,从而为您提供了对返回数据执行操作的机会(在这种情况下触发alert)然后,完成上一个操作后,重新加载页面。

答案 1 :(得分:0)

或者,您使用$ .ajax()并将asynch : false选项传递给它。

function deleteFunction(courseId, userId) {
  $.ajax({
    url: '../controlers/doDelete.jsp',
    type: 'POST',
    dataType: 'json',
    asynch: false,
    data: {
      courseId: courseId,
      userId: userId
    }
  }).done(function(data) {

    alert("something here");
  });

  location.reload();
}

asynch : false强制ajax同步运行,因此,脚本会停止并等待,直到ajax请求完成,而不是在后台运行ajax。