Nasıl XMLHTTPRequest nesne aracılığıyla bir değer yazmak için?

2 Cevap php

Ben dinamik olarak bir tablo içinde oluşturulan bağlantıları bir dizi var. Her satır o etiketine benzersiz bir "kimliği" özelliği vardır. Amaç XMLHTTPRequest bir dış veritabanından kaldırmak için hangi kayıt sayfası 'deletepost.php' anlatmak için elde etmektir.

Bu satırın değerine gizli bir giriş değeri (bir numara) değiştirir ve sonra bu formu gönderdiğinde

    <script type="text/javascript">
        var http = false ;

        // instance the request object!!!!
        if(navigator.appName == "Microsoft Internet Explorer") {
          http = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
          http = new XMLHttpRequest();
        } 
        /////////////////////////////////////////////////

        function rdel(num) {
        document.getElementById("pid_to_del").value = num; 
        //this element is a hidden <input> tag. this line changes the value.

        http.open("POST", "deletepost.php", true); //this _SHOULD_ post the form 
        http.onreadystatechange = function() {

         if(http.readyState == 4) {
            $("tr#r" + num).fadeOut("slow"); // jquery fadeout animation
            alert(http.responseText); // this alerts whatever deletepost.php says
         }      
        }

        http.send(null);
    } 


</script>

Bu fonksiyon RDel () bu gibi görünüyor linkleri, biri tarafından denir:

<a href="javascript:rdel('7');"> delete </a>

Bu deletepost.php gibi görünüyor:

<?php
   print_r($_POST);
?>

Istek uyarıları yapar sayfası:

Array ( )

Boş bir dizi. : (Neden?!

2 Cevap

Burada iki şey, ilk aslında içine sonrası dize (bir sorgu dizesi çok benzer) koymak zorunda olduğunu

http.send(null);

diyoruz. Yani yapardın:

http.send('field1=value1')

İkincisi, aslında nakledilen değerler vardır ki sunucuyu bildirmek için için, size kullanarak istek için içerik türünü ayarlamanız gerekir:

http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

Umut olur

EDIT:

Ben uyumsuz sunucuya bir html form tefrika kopyasını gönderdi bu isteği kullanmaya çalışıyoruz şimdi bakın. Javascript bu yapmak için işlevselliği içermez, ancak bazı kütüphaneler ve (örneğin, JQuery ve AjaxForm gibi) eklentileri yapın.

Lütfen Örneğin, ancak, kullanarak bunu gerçekleştirmek mümkün olmalıdır:

http.send('pid_to_del=' + pid);

Hızlı düzeltme olacaktır:

where you open the XMLHttpRequest object: http.open("POST", "deletepost.php", true) change the url to be "deletepost.php?number="+num

then in you php page change the POST to a GET. $number = $_GET['number']

POST etrafında parametreleri / seçenekler büyük miktarda göndermek için izin verir ama sayıları fazla 140 karakter uzunluğunda olacak sürece, bu hiçbir fark yaratacak. Bu mesaja değişkeni işlemek için bir tarayıcı almak için nasıl daha açık görünüyor çünkü POST, GET daha güvenli bir yaygın yanlış anlayışı var gibi görünüyor. Ancak, güvenlik yayınlamaktan ziyade alma bağımlı olmamalı yani POST değişkenler ile aynı şeyi yapmak için çok çok küçük bir esneme. Bunu kolayca işe almak mümkün görünmüyor dışında POST kullanarak yanlış bir şey yok. Ben javascript doğrudan bunu asla. Hep jquery gibi bir şey kullanmak istiyorsunuz. Aşağıdaki ile tüm senaryoyu değiştirmek olabilir ve çoğu tarayıcılarda çalışır:


function rdel(num) {
    $.post("/webroot/deletepost.php", {number: num},
        function(dat){
            $("tr#r" + num).fadeOut("slow"); // jquery fadeout animation
            alert(dat.responseText); // this alerts whatever deletepost.php 
    });
}

Bir sayfada id o kadar sonuç $ ('# r' + num) gibi aynı olacaktır benzersiz ama alacağını arada, seçici $ ('tr # r' + num) olarak, tr gereksiz artık seçici hesaplamak için. Id tarafından başvuru sonra eski buluntular tüm tr etiketleri ve yerine 'yerli' sadece seçici id fonksiyonunu kullanarak GetElementById kullanarak daha, bu koleksiyon içindeki id bulur, hızlı. Kısacası, jquery bunu yapmak gerekmez şey yapmazlar ;)