2012-04-07 132 views
0

我有一个Ajax调用服务器,只有当我通过alert();它的作品。无法弄清楚什么是错的。谁能帮忙?非常奇怪的jQuery/AJAX行为

目的

  1. 如果 “更新” 按钮,在PrettyPhoto的iFrame点击 - 然后(一)呼叫服务器来运行PHP脚本,更新后端数据库,(二)密切PrettyPhoto窗口,以及(c)刷新
  2. 如果“不更新”按钮,在PrettyPhoto的iFrame点击 - 只是(一)密切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 

}); 

This Works! (即,当我有警报()目前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 

}); 
+0

最晚将无法正常工作。您必须将关闭位置更改为成功 – mplungjan 2012-04-07 20:32:25

+0

(@mplungjan),并且它不关闭也不重定向。但后端数据库通过ajax调用得到更新... – 2012-04-07 20:39:54

回答

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(); 
    } 
}); 
+0

不知道你的意思@mplungjan – 2012-04-07 17:26:24

+0

看到更新..... – mplungjan 2012-04-07 17:27:03

+0

啊,我看到@mplungjan。感谢修改后的脚本。欣赏它! – 2012-04-07 17:35:14

2

AJAX是异步的。调用$.ajax()将启动对服务器的请求,然后脚本的其余部分将继续执行,即使请求正在传回服务器。

alert()用来'放慢'/暂停你的其他代码,允许ajax请求完成。

你需要做的是这样的:

$.ajax({ 
    url: '....'; 
    success: someFunction; 
}); 
当AJAX调用成功

,它会调用someFunction(),这就是你会做你的.location.href东西。

+0

jQuery是evkked'onChange'从表单。因此,如果状态为'N'的脚本通过并且关闭和重定向工作。如果status ='Y',那么脚本除了ajax调用外都可以工作。 (谢谢@ MarcB) – 2012-04-07 17:28:05

+0

我只是想在status =='Y'时启动ajax调用,然后执行close()和redirect()。 – 2012-04-07 17:30:16

+0

我想你的答案@MarcB ......不能让它工作,我不停地修改它来尝试获得成功,关闭()和重定向。但它只关闭和重定向磨损状态=='N' – 2012-04-07 20:27:39

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 
    } 
}); 
+0

我试过了你的答案@Chasee ...无法让它工作我一直在修改它,试图获得关闭()和重定向的成功。但它只关闭和重定向磨损状态=='N' – 2012-04-07 20:27:27

+0

点:我猜脚本是正确的,但我用(;)代替(,)与URL初始化。请修复它,然后重试。 – Wasim 2012-04-08 09:29:27

+0

我确实使用了逗号@Charsee。谢谢。 – 2012-04-08 10:39:41