javascript çalışmıyor, hiç hata

8 Cevap php

Ben get_Records.php yüklenen asla gibi bir hata olmadan yükler aşağıdaki javascript kodu, ancak güncelleme fonksiyonu aslında işlevsel görünmüyor var. Bu get_records.php içinde yüklü olarak get_auction.php yüklü ise ben test edemez

One of my main concerns Ben güncelleştirme (sadece bir tanesi hiç kullanılacak gibi), paramters pk ve sorgu almak suretiyle yanlış bir şey yapıyorum olmasıdır. Bu kötü kesmek ve kötü mantık gibi görünüyor, ama daha iyi bir şekilde farkında değilim.

İşte kod

var xmlHttp
var layername
var url

function update(layer, part, pk, query) {
    alert ("update");
    if (part=="1") {
        alert ("part 1");
        url = "get_auction.php?cmd=GetAuctionData&pk="+pk+"&sid="+Math.random()
    } else if (part=="2") {
        alert ("part 2");
        url = "get_records.php?cmd=GetRecordSet&query="+query+"&sid="+Math.random()
    }
    xmlHttp=GetXmlHttpObject()
    if(xmlHttp==null) {
        alert("Your browser is not supported?")
    }
    xmlHttp.onreadystatechange = function() {
        if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
            document.getElementById(layer).innerHTML=xmlHttp.responseText
        } else if (xmlHttp.readyState==1 || xmlHttp.readyState=="loading") {
            document.getElementById(layer).innerHTML="loading"
        }
    };
    xmlHttp.open("GET",url,true)
    xmlHttp.send(null)
}

function GetXmlHttpObject() {
    var xmlHttp=null;
    try {
        xmlHttp = new XMLHttpRequest();
    } catch (e) {
        try {
            xmlHttp =new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
    }
    return xmlHttp;
}

function makewindows() {
    child1 = window.open ("about:blank");
    child1.document.write(<?php echo htmlspecialchars(json_encode($row2["ARTICLE_DESC"]), ENT_QUOTES); ?>));
    child1.document.close(); 
}

Ben güncelleme fonksiyonu içine uyarı ifadeleri yerleştirilir, andnot biri görüntülenir, güncelleme fonksiyonu asla denir gösterilir?

Ben istemiyorum, ve bir çerçeve kullanamazsınız, ne de ben kundakçı kullanmak erişimi var, bu yüzden bu şeyleri tavsiye etmeyiniz. Ben onlardan farkındayım ve ne zaman olabilir bunları kullanmak.

Ben de makeWindows içinde php aradığını bilmek istiyorum () makeWindows sadece bir parametre olması tercih edilir .., her yaklaşımın herhangi bir avantajı veya dezavantajı var mı?

Ben işlevini çağırmak için çalışırken, bu PHP bunu yapıyorum nasıl bir hata almak gibi:

echo "<li><a href='#' onclick=update('Layer3','2','0','hello')'>Link 1</a></li>" .

? ince olmalıdır, bu html, "\ n" yapar;

<li><a href='#' onclick='update('Layer3','2','0','hello')'>Link 1</a></li>

edit: Ben tester101'S tavsiye almış ve bu onu değişti:

echo '<li><a href="#" onclick="update(\'Layer3\',\'2\',\'0\',\'hello\')">Link 1</a></li>' . "\n";

Hangi hala bir hata verir. Herhalde toms cevabını kullanarak sona erecek, ancak bu çalışmıyor neden bilmek istiyorum.

8 Cevap

Sadece o zaman içinde url oluşturmak gerek olmazdı) (güncellemek için bir parametre olarak Url sürebilir ve 'isteğe bağlı' parametreye ihtiyaç olmazdı

Edit (response to comment)

Sadece url ve eleman id (tabaka) alır ve bir AJAX arama sonucuna dayalı olarak güncelleştiren bir güncelleştirme () fonksiyonu varsa, isteğe bağlı parametreler için ihtiyaç kaldırmak için böyle bir şey yapmak ve iki yapmak için bir işlev kullanarak olabilir farklı şeyler.

function update(layer, url) {
    var xmlHttp=GetXmlHttpObject(); //you have this defined elsewhere

    if(xmlHttp==null) {
        alert("Your browser is not supported?");
    }

    xmlHttp.onreadystatechange = function() {
        if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
            document.getElementById(layer).innerHTML=xmlHttp.responseText;
        } else if (xmlHttp.readyState==1 || xmlHttp.readyState=="loading") {
            document.getElementById(layer).innerHTML="loading";
        }

       //etc
    }

    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
}


function updateByPk(layer, pk) {
   url = "get_auction.php?cmd=GetAuctionData&pk="+pk+"&sid="+Math.random();
   update(layer, url);
}


function updateByQuery(layer, query) {
   url = "get_records.php?cmd=GetRecordSet&query="+query+"&sid="+Math.random();
   update(layer, url);
}

Sonra ne yapmak istediğinize bağlı olarak, ya da arayın:

updateByPk('id_of_div', 2);

veya

updateByQuery('id_of_div2', 'query');

örneğin HTML

<a href="#" onclick="updateByQuery('Layer3', 'hello');">Link 1</a>

veyato generate that in PHP

<?php echo '<a href="#" onclick="updateByQuery(\'Layer3\', ' . json_encode($query) . ');">Link 1</a>';

Eğer Firefox kullanıyorsanız ve hata üretebileceği, ben şiddetle Firebug kullanarak öneririm o Artı yerine can "uyarı" ifadeleri kullanmak zorunda kullanımı vb komut, set kesme noktaları aracılığıyla adım gibi gerçekten çok kolay console.info("unexpected value x=%o", some_object); gibi şeyler kullanabilir ve sizin komut kesintiye w / o daha sonra inceleyebiliriz (hat # dahil) konsola bir değer oturum olacaktır.

edit: Eğer sunucu üzerinde PHP kullanıyorsanız eğer, aslında, size FirePHP istemci üzerinde hata ayıklama yardımcı olmak için kullanabilirsiniz.

Eğer PHP kodu mantıklı bir şey döndüren doğruladıktan? (Ben senin html kaynak kodunu görebilirsiniz ki, varsayalım.)

Onlara ulaşmak emin olmak için kod yerleştirin uyarı ifadeler (örneğin windows.alert("GetXmlHttpObject started.");): iyi ol 'uyarısı-hata ayıklama kullanın.

JSLint size yardımcı olabilir. Gerçi bunu denedim ve gerçekten yanlış bir şey bulamadık.

Bunu tüm argümanlar vermek Yüklü eğer kaygıları ile ilgili olarak, bildiğim kadarıyla benim gibi JavaScript şikayet etmez.

ör

function myFunction(var1, var2, var3, var4){

gibi bu işlevi çağırarak:

myFunction('test1','test2');

bir hata üretmez.

Bu bir argüman yanındaki varsayılan koyarak benzer, null veya undefined olarak javascript olmak varsayılan.

Bunu kontrol ederek test edebilirsiniz:

if(null != var3){

Eğer bu işlevi biraz temizlemek yardımcı olabilir; Ayrıca biraz javascript toparlamak olacak web küçük bir ajax sınıf hasat edebilirsiniz. , XMLHttpRequest nesnesini saklanması orada fonksiyonlarını sarma aynı sonuçları ile çapraz tarayıcı kullanımını sağlayan bol miktarda vardır.

Eğer herhangi bir yardıma ihtiyacınız varsa bana bildirin. Biraz prebuilt ajax yöntemleri bulmak eğer bazı güven (jQuery bazı büyük işlevi vardır!), Size ulaşmak için çalışıyoruz görev çok daha kolay olacaktır.

Firefox sayfanızı açın, ben hata konsolu (CSJ) kontrol ediyorum. Bu beni çok, pek çok yazım hataları bulmak yardımcı oldu.

Ayrıca, kod noktalı virgül bir çok eksik görünüyor. Belki bazıları isteğe bağlıdır ama ...

Uyumsuz parantez içinde

child1.document.write(<?php echo htmlspecialchars(json_encode($row2["ARTICLE_DESC"]), ENT_QUOTES); ?>));

onclick=update('Layer3','2','0','hello')'>Link 1

Bu bir yazım hatası olup olmadığını bilmiyorum ama bu çizgi olmalıdır


onclick="update('Layer3','2','0','hello')">Link 1



This code will cause errors and never call update, because the single quote after onClick= terminates at ('. Use double quotes.


onclick='update('Layer3','2','0','hello')'>Link 1

Belki çok newlines?

";" Çoğu dilde, komut ayırıcı olarak yeni satır, ya da var. JavaScript, hem var: satır sometimes olarak çalışıyor ";"

Eğer yardımcı olur yerine, bu deneyin, bakın:

function update(layer, part, pk, query) {
   alert ("update");
   if (part=="1") {
      alert ("part 1");
      url = "get_auction.php?cmd=GetAuctionData&pk="+pk+"&sid="+Math.random()
   } else if (part=="2") {
      alert ("part 2");
      url = "get_records.php?cmd=GetRecordSet&query="+query+"&sid="+Math.random()
   }
   // and so on...
}

Farklı tek şey biçimlendirme: açılış kıvırcık ('başka', 'işlevi', 'eğer', ...) kullandığı yapı olarak aynı hat üzerindedir.