jQuery / AJAX:. Her eğer, post, html: rastgele çalışır ama verileri siler

1 Cevap php

Ben FedEx ve birlikte, bir PHP sayfası var UPS takip sınıfı "trackingnumber" ile DIV'leri ID yıllardan içine yankılanan bir MySQL veritabanı sayılar. Benim JS Her olanlar divlere yoluyla ve o zaman anketler Fedex / UPS ve onlardan sonuç echos bir PHP sayfası göndermek için kimliğini kapmak. Yani tek bir şey hariç, harika çalışıyor. Onu Dolu sonra rastgele verileri siler. Yani veri bir saniye için ekranda yanıp söner ve sonra kaybolur. Bu sadece beni karıştırma çok, hangi rastgele bulunuyor. Bu Video demonstrating the issue (.mov) daha iyi anlamak için check out.

JS:

$(document).ready(function(){
    //Dislay some text indicating that we're getting status
    if ($("[id!='']")) {
        $("div.trackingnumber").html("working...");
    };
    //Begin getting status
    $('div.trackingnumber').each(function(index){
        var v2 = $(this).attr("id");
        //If it's FedEx, post to the FedEx script.
        if ($("[id!='1z'], [id!='1Z']")) {
            $.post("inc/fedex.php", { v: v2 }, function(data){
                $("#" + v2).html(data);
            });
        };
        //If it's UPS, post to the ups script.
        if ($("[id^='1z'], [id^='1Z']")) {
            $.post("inc/ups.php", { v: v2 }, function(data){
                $("#" + v2).html(data);
            });
        };
    });
});

İlgili HTML (PHP çözümlerdi sonra):

<td scope='col' width='100px'>
        <div class='trackingnumber' id='1ZX799380311650886'></div>
</td>

Herhangi bir fikir? JQuery (ve genel olarak JS) yeniyim ... Ben bu yüzden ne yapıyor hiçbir fikrim var. Tüm benim kod (bu sınıftaki herhangi bir veri olmadan bir div çarptığında Kundakçı veya Safari'nin web denetiminde sadece hatalardır) geçerli gibi görünüyor ... Ben, şimdi yaklaşık bir gün boyunca bu mücadele oldum nihayet onu alıyorum Bu nokta ... Gerçekten birisi bana yardımcı mümkün olacak umut!

1 Cevap

Ben jQuery nasıl çalıştığını yanlış ettik korkuyorum; Lütfen if beyanları mantıklı değil.

$("[id!='']") always nedeniyle JavaScript otomatik tip zorlama, always değerlendirecek, bir jQuery nesnesi dönecektir true. Diğer bir deyişle $("[id!='']") == true olursa olsun, HTML gibi görünüyor. Aynı senin if tabloların geri kalanı için de geçerlidir.

Bu nedenle hata senin kodunu alır UPS ve FedEx betikleri both {sonuçları [(1)]}. AJAX çağrıları uyumsuz olduğundan sonuçlarınız böylece verilerin görünüşte rasgele bir takas (boş veri döndürülür after doğru veri) neden farklı sıralarda görünebilir.

Bu benim size davranmaya kodunuzu amaçlanan varsayalım nasıl:

$(document).ready(function(){
  // Select all of the tracking numbers on the page
  $(".trackingnumber").
    // Display some text in each, indicating that we're getting status
    text("working...").
    // Begin getting status for each tracking number.
    each(function () {
      var trackingNumber = this.id;

      // Use the fedex script by default ...
      var script = "fedex";

      if (trackingNumber.match(/^1z/i)) {
        // ... unless it's a UPS tracking number.
        script = "ups";
      }

      $.post("inc/" + script + ".php", { v: trackingNumber }, function(data){
          $("#" + trackingNumber).html(data);
      });
    });
});

Working Demo: http://jsbin.com/iyeci (yoluyla düzenlenebilir http://jsbin.com/iyeci/edit)

Eğer kodu anlama daha fazla yardıma ihtiyacınız varsa sormak için tereddüt etmeyin.