2012-04-07 4 views
0

У меня есть вызов Ajax на сервер, который работает только при передаче alert();. Не могу понять, что не так. Может ли кто-нибудь помочь?Очень странное поведение jQuery/AJAX

ЦЕЛЬ

  1. Если кнопка «Update» щелкнул в PrettyPhoto плавающем фрейме - то (а) вызов сервера для запуска PHP скрипт, который обновляет базу данных бэкэнда, (б) закрыть окно PrettyPhoto, и (с) обновить страницу
  2. Если «не обновлять» кнопка нажата в PrettyPhoto плавающем фрейме. - только (а) закрыть окно PrettyPhoto, и (б) обновить страницу

Это не работает (то есть, 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 

}); 

Это работает! (То есть, 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

+0

Я сделал (@mplungjan), и он не закрывал и не перенаправлял. Но база данных базы данных обновилась при вызове ajax ... –

ответ

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 –

+0

См. Обновление ..... – mplungjan

+0

А, я вижу @mplungjan. Спасибо за исправленный сценарий. Ценить это!! –

2

AJAX является асинхронным. Звонок $.ajax() инициирует запрос на сервер, а затем остальная часть вашего скрипта будет продолжать выполняться, даже когда запрос возвращается на сервер обратно.

Предупреждение() служит для «замедления»/приостановки остальной части вашего кода, что позволяет выполнить запрос ajax.

Что вам нужно сделать, это:

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

когда преуспевает вызов Ajax, он будет вызывать someFunction(), который является, где вы могли бы сделать свой .location.href материал.

+0

jQuery evkked 'onChange' от форма. Так что если val для статуса == 'N', скрипт проваливается, а работа закрытия и перенаправления. Если status = 'Y', скрипт работает, за исключением вызова ajax. (спасибо @ MarcB) –

+0

Я просто хочу запустить ajax-вызов, когда status == 'Y', а затем выполните функции close() и redirect(). –

+0

Я пробовал ваш ответ @MarcB ... не смог заставить его работать, я продолжал пересматривать его, пытаясь добиться успеха, чтобы закрыть() и перенаправить. Но он только закрывает и перенаправляет статус whet == 'N' –

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 ... не смог заставить его работать, я продолжал его пересматривать, пытаясь добиться успеха, чтобы закрыть() и перенаправить. Но он только закрывает и перенаправляет статус whet == 'N' –

+0

Dot: Я предполагаю, что сценарий верен, но я использовал (;) вместо (,) с инициализацией url. Пожалуйста, исправьте его и повторите попытку. – Wasim

+0

Я действительно использовал запятую @Charsee. Благодарю. –