AJAX: nasıl ben senkron istekleri ihtiyacı soruna alabilirim?

0 Cevap php

Ben daha önce sorulan soru silme ve daha özlü şimdi sorun biraz daha anlayışa sahip olduğunu tekrar soruyorum.

AJAX bir çok kullanır ve (metin form elemanları ve div diğer form elemanı döndü) güncellendi ve dinamik içeriği ile doldurulan bir sayfa var.

Gerçekten onlar devam etmeden önce (onlar bazı değerleri teslim olan bir metin alanı tamamladıktan sonra örneğin) AJAX istekleri işlenir kadar beklemek mümkün kuvvet kullanıcıların gerekir. Ne toplamak senkron istekleri kullanarak vb asılı tarayıcı ile sorunlara neden olabilir ..

Ben de birden AJAX işlev çağrıları yürüten bir javascript işlevi olması gerekir ama ben de bir anda yürütmek için onlara ihtiyacımız var. Şu anda uyumsuz çağrı kullanarak belki ben bu konuda yanlış şekilde gidiyorum ... öngörülemeyen sonuçlar üretir. Kod çok çok kısa bir örnek vermek zor ama ben veririm vardır altında bir deneyin:

Bu içerik veritabanına yazılır giriş düzenlendi ilk kez (ilk kez ise (ki kendisi bir Ajax fonksiyonu ile eklenir) alttan dinamik sayfaya fazla form öğeleri ekler ... sonradan sadece güncellenir mevcut db giriş ve ek form öğeleri eklemek gerek) yok

   <form name='talkItemForm' id='talkItemFrom-<?php print $_POST[talkItemID]; ?>' class='talkItemForm' method='post'>

   <input type='hidden' id='talkItemID' name='talkItemID' value='<?php print $_POST[talkItemID]; ?>'><input type='hidden' id='talkID' name='talkID' value='<?php print $_POST[talkID]; ?>'>

   <input type='text' name='talkItemInput' id='talkItemInput' value='New Topic...'  onblur=" updateTalkItem(this.parentNode, '<?php print $_POST[talkID]; ?>', '<?php print $_POST[talkItemID]; ?>'); isNewTalkItem('<?php print $_POST[talkID]; ?>', '<?php print $_POST[talkItemID]; ?>', '<?php print generateTalkItemID()+1; ?>','<?php print generateNoteID(); ?>'); "/>

   </form>

Çağırır:

   function isNewTalkItem (talkID, talkItemID, newTalkItemID, newNoteID){

      var url = "./wp-content/themes/twentyten/addBelowIfNew.php";

      var poststr = "talkItemID=" + talkItemID;

      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
            // set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }

      http_request.onreadystatechange = function(){


           if (http_request.readyState == 4) {
               if (http_request.status == 200 || http_request.status == 0) {

                  result = http_request.responseText;

        //following code will note execute if this is not the first time this field has been edited... 
        if (result) {

                        // call to AJAX function that inserts a new <form>
            newNote(newNoteID, talkItemID);

                        // another call to AJAX function that inserts a new <form>
            newTalkItem(talkItemID, talkID);

        }

               } else {
                  alert('There was a problem with the request.');
               }

           }

      }    

      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", poststr.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(poststr);

0 Cevap