2009-08-12 6 views
9

Poniżej znajduje się skrypt jquery, nad którym pracuję, usunąłem wszystkie jego nieistotne części.Czy można wywołać wywołanie AJAX w innym wywołaniu AJAX w jquery?

Możesz zobaczyć, że istnieje wywołanie ajax, z wyników znajduje się instrukcja if, inne elementy są usuwane, ale w każdym razie captcha jeden jest wybierany z wyniku pierwszego wywołania ajax.

Następnie muszę wykonać drugie wywołanie ajax, to jest mój kłopot, nie dostaję błędów, ale nie wydaje się, aby odpowiedzieć na drugie pytanie, czy brakuje mi czegoś?

<script type="text/javascript"> 
    $(document).ready(function() { 
     // make ajax call 
     var dataString = 'comment=' + comment; 
     $.ajax({ 
      type: "POST", 
      url: "process.php", 
      data: dataString, 
      dataType: "json", 
      success: function(data) { 
       //result from 1st ajax call returns "captcha" 
       if (data.response === 'captcha') { 
        //a bunch of code is ran 
        //////////////////////// 
        //then... 
        $().bind('cbox_closed', function() { 
         var dataString2 = 'comment=' + comment + '&run=captchagood'; 

         // our nested ajax call 
         // this is the part that is having trouble =(
         $.ajax({ 
          type: "POST", 
          url: "process.php", 
          data2: dataString2, 
          dataType: "json", 
          success: function(data2) { 
           if (data2.response === 'captchagood') { 
            alert('test'); 
            $('div#loader').find('img.load-gif').remove(); 
            $('div#loader').append('<span class="success">Thanks for your comment!</span>'); 
            $('div#loader').hide().fadeIn('slow'); 
            $('span.limit').remove(); 
            $('div#comments').append(data); 
            $('div#comments div.comment-unapproved:nth-child(1)').hide().slideDown('slow'); 
            $('input#submit-comment').unbind('click').click(function() { 
             return false; 
            }); 
            // success append the sanitized-comment to the page 
            $('#comments').prepend(data.comment); 
           }; 
           // end captcha status returned 
          } 
         }); 
        }); 
       }; 
       return false; 
      }); 
     }); 
    }); 
</script> 
+1

Czy próbowałeś złapać funkcję wywołania zwrotnego "błąd"? błąd: funkcja (XHR, textStatus) {console.log (XHR); }? Zerknął na prośbę z firebug? – gnarf

+1

To nie jest tak naprawdę * wewnątrz * wywołania AJAX, funkcja 'sukcesu' jest * po * wywołaniu. – Kobi

Odpowiedz

12

Nie ma nic złego w posiadaniu wywołania ajaxowego wewnątrz wywołania ajaxowego. W rzeczywistości, nie jesteś nawet robić to, co robisz tutaj jest:

  1. Ajax połączenia
  2. Jeśli połączenie jest udane i „captcha” zwraca następnie powiązać funkcję do cbox_closed imprezy
  3. gdy cbox_closed zdarzenie jest wyzwalany wywołać funkcję związaną który zawiera inny wywołania AJAX

kilka rzeczy do sprawdzenia:
Czy Sever powrocie z powodzeniem? (błąd 404, 500 itd.)
Spodziewasz się odpowiedzi jsona. Czy zawiera on takie dane, jak {response: 'captcha}, które sprawdzasz?
Kiedy zostanie wywołane zdarzenie cbox_closed? Jesteś pewien, że to się dzieje?

3

Zdałeś "oddzwanianie" oddzwonienia do jQuery, ale nie oddzwoń do "błędu". W ten sposób ignorujesz błąd. Oto przykład, aby uchwycić błąd i opcjonalnie wyświetlić go w konsoli Firebug.

Powiązane problemy