0

我有一个对服务器的 Ajax 调用,只有当我传递alert();给它时才有效。无法弄清楚出了什么问题。任何人都可以帮忙吗?

客观的

  1. 如果在 PrettyPhoto iFrame 中单击“更新”按钮 - 然后 (a) 调用服务器以运行更新后端数据库的 PHP 脚本,(b) 关闭 PrettyPhoto 窗口,以及 (c) 刷新页面
  2. 如果在 PrettyPhoto iFrame 中单击“不更新”按钮 - 只需 (a) 关闭 PrettyPhoto 窗口,然后 (b) 刷新页面

这不起作用(即,没有对服务器进行 Ajax 调用):

jQuery.support.cors = true; // needed for ajax to work in certain older browsers and versions

$('input[name="status"]').on("change", function() {

    if ($('input:radio[name="status"]:checked').val() == 'Y') {

        $.ajax({
            url: 'http://mydomain.com/dir/myPHPscript.php?param=' + $('#param').val() + '&id=' + ( $('#id').val() * 1 ) + '&mode=' + $('#mode').val()
        });

    }

    window.parent.closePP();

    window.top.location.href = $('#redirect').val();    // reloads page

});

这有效!(即,当我有 alert() 存在时,对服务器进行 Ajax 调用):

jQuery.support.cors = true; // needed for ajax to work in certain older browsers and versions

$('input[name="status"]').on("change", function() {

    if ($('input:radio[name="status"]:checked').val() == 'Y') {

        $.ajax({
            url: 'http://mydomain.com/dir/myPHPscript.php?param=' + $('#param').val() + '&id=' + ( $('#id').val() * 1 ) + '&mode=' + $('#mode').val()
        });

        alert('this makes it work');

    }

    window.parent.closePP();

    window.top.location.href = $('#redirect').val();    // reloads page

});

谢谢。

根据答案进行了多次修改——仍然无法正常工作。这是最新的:

jQuery.support.cors = true; // needed for ajax to work in certain older browsers and versions

$('input[name="status"]').on("change", function() {

if ($('input:radio[name="status"]:checked').val() == 'Y') {

    $.ajax({
        url: 'http://mydomain.com/dir/myPHPscript.php?param=' + $('#param').val() + '&id=' + ( $('#id').val() * 1 ) + '&mode=' + $('#mode').val(),
        success: functions(data) {var $doNothing = data;}
    });

}

window.parent.closePP();
window.top.location.href = $('#redirect').val();    // reloads page

});
4

3 回答 3

2

您需要在 Ajax 回调中完成其余的工作

jquery ajax

$('input[name="status"]').on("change", function() {
    if ($('input:radio[name="status"]:checked').val() == 'Y') {
        $.ajax({
            url: 'http://mydomain.com/dir/myPHPscript.php?param=' + $('#param').val() + '&id=' + ( $('#id').val() * 1 ) + '&mode=' + $('#mode').val()
        },
        success:function() {
          window.parent.closePP();
          window.top.location.href = $('#redirect').val();    // reloads page
        });
     }
     else {
          window.parent.closePP();
     }
 });

您也可以只获取数据:

$('input[name="status"]').on("change", function() {
    if ($('input:radio[name="status"]:checked').val() == 'Y') {
        $.get('http://mydomain.com/dir/myPHPscript.php?param=' + $('#param').val() + '&id=' + ( $('#id').val() * 1 ) + '&mode=' + $('#mode').val(), 
         function() {
          window.parent.closePP();
          window.top.location.href = $('#redirect').val();    // reloads page
        });
     }
     else {
          window.parent.closePP();
     }
 });
于 2012-04-07T17:25:01.693 回答
2

AJAX 是异步的。该$.ajax()调用将向服务器发起一个请求,然后脚本的其余部分将继续执行,即使请求正在返回服务器。

alert() 用于“减慢”/暂停其余代码,允许 ajax 请求完成。

你需要做的是:

$.ajax({
    url: '....';
    success: someFunction;
});

当 ajax 调用成功时,它会调用someFunction().location.href 。

于 2012-04-07T17:25:36.100 回答
1

你可以试试这个:

$('input[name="status"]').on("change", function() {

    if ($('input:radio[name="status"]:checked').val() == 'Y') {

       $.ajax({
          url: '....',
          success: function(data) {
                    window.parent.closePP();
                    window.top.location.href = $('#redirect').val();  
                   }
       });      

    }
    else{

       window.parent.closePP();

       window.top.location.href = $('#redirect').val();    // reloads page
    }
});
于 2012-04-07T17:38:47.173 回答