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 に答える