XMLHttpRequest açık yöntemi ile javascript: yazı ve parametrelerini kullanarak

3 Cevap php

Benim web sitesi kullanıcıları, ideal olarak, yaklaşık bir saat (temelde bir online-deneyi) boyunca bir db sunucuya bir kaç yüz mesajları gönderme olacak. Deney js uygulanan, bu yüzden komut topladığı veri göndermek için bir XMLHttpRequest nesnesini kullanmak çalışıyorum.

Ben yaklaşık belirsiz olduğum şey POST parametresini kullanmak için nasıl. Ben daha önce db sunucuya gönderilen işleme için bir. Php sayfasına erişilebilir olabilir bu yüzden $ _POST değişkeni için yaklaşık 8 farklı anahtar / değer çiftlerini ayarlamak istiyorum. Ben sadece göndererek, sunucu kendisi herhangi bir bilgi alınırken ilgilenmiyorum (neden olan, ve bunu ben '1 '/ açık koşullu readyState kuruyorum, doğru bir yaklaşım olup emin değilim).

İşte ben şu anda çalışıyorum script:

function postData(dataList) {

 var xmlhttp = new XMLHttpRequest();
 var processingUrl = "process_exercise_data.php";
 var POSTBody = "";
 POSTBody+="block_type="+encodeURIComponent(dataList[0]);
 POSTBody+="&block_number="+encodeURIComponent(dataList[1]);
 POSTBody+="&trial_type="+encodeURIComponent(dataList[2]);
 POSTBody+="&trial_number="+encodeURIComponent(dataList[3]);
 POSTBody+="&input_value="+encodeURIComponent(dataList[4]);
 POSTBody+="&output_value="+encodeURIComponent(dataList[5]);
 POSTBody+="&prediction_value="+encodeURIComponent(dataList[6]);
 POSTBody+="&error="+encodeURIComponent(dataList[7]);


 xmlhttp.open("POST",processingUrl,true);
 if (xmlhttp.readyState==4) {
  xmlhttp.send(POSTBody);
 }

}

The main goal is to send the key/value pairs to the .php page using POST while remaining on the current page (basit AJAX isteği, yanılmıyorsam eğer). Herhangi bir yorum veya öneriniz çok takdir!

O / o sunucu için bu veriler, bu fonksiyon ve POST çağırmak için, (bu işlevin kapsamı dışında) belli bir koşul altında belli bir şekilde hareket ettiğinde Ben başarmak için çalışıyorum hepsi, kullanıcı yaşıyor, unutmayın. Bir sunucu yanıtı metin gerekli değildir.

EDIT:

Şimdi soru şudur: Ben hala işleme php sayfasında yılında $ _POST dizi erişmek mümkün olacak mı? İşte bir örnek:

$block_type = $_POST['block.type'];

3 Cevap

Sen istek başlıklarını ayarlamak istemiyorum. Ne istediğiniz body birlikte isteği göndermek için. Ve vücut gibi olmalıdır

'block_type='+encodeURIComponent(dataList[0])+'&block_number='+encodeURIComponent(dataList[1])

vb fikrim var sanırım. Vücut Eğer XMLHTTPRequest nesnenin send() yöntemine geçmek budur.

Bu görev çok daha kolay hale getirecek, jQuery kullanarak düşünün. jQuery.post method you only have to provide the data karma kullanarak, serileştirme, doğru kaçan veya readyState konusunda endişelenmenize gerek yok.

Sen readyState değişecektir önce göndermek çağırmalıdır.

Değiştirmek

xmlhttp.open("POST",processingUrl,true);
if (xmlhttp.readyState=4) {
  xmlhttp.send(POSTBody);
}

ile

xmlhttp.open("POST", processingUrl, false);
xmlhttp.send(POSTBody);

Eğer bir yanıt işlemek istiyorsanız, tanımlar eklemek xmlhttp.onreadystatechange:

xmlhttp.open("POST", processingUrl, false);
xmlhttp.onreadystatechange = function () {
  if (this.readyState === 4) {
    // handle response
  }
};
xmlhttp.send(POSTBody);

Düzenleme: Ben de = JavaScript eşitlik operatörü atama operatör var, olmadığını belirtmek isterim. === eşitlik kontrol tipi dönüştürme eşitlik için kontrol ve == için kullanın.