Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Ajax ile Rastgele gelen verinin bir daha gelmemesi ?

Merhaba Arkadaşlar bir sorum vardı yardım ederseniz mükemmel olur..

Şu ajax kodyla bir webmethota istek yapıp veritabanından rastgele bir soru ve 4 şıkkı geliyor...

Ama her isteiğimde aynı soru getirme ihtimali var bunun kontrolünü java script'te nasıl yaparım



KOD:

[HTML]$.ajax({
type: 'POST',
url: 'test.aspx/cevapGetir',
data: '{}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (cevap) {


var sorular = $.parseJSON(cevap.d);

$.each(sorular, function (s, sorucevap) {

$("#questionField").text(sorucevap.Text);
$("#lblSruPuan").text(sorucevap.puan);

ID = sorucevap.ID;
toplamPuan += sorucevap.puan;
$("#lblToPuan").text(toplamPuan);


$.each(sorucevap.Answers, function (c, cvp) {




ans += cvp.Text +"<br/>";




});

$("#answersField").html(ans);


});[/HTML]
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Cevaplar

  • necmettin adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    80 cevap - 0 soru
    sorucevap ile birlikte Id geliyorsa gelen Id'leri ayrı bir array'e kaydedip o sorunun daha önce gelip gelmediğini o array'de yeni Id'nin olup olmadığına bakarak kontrol edebilirsin.

    Ama bu kontrolü Javascript'e yaptırdığında sayfa kapatılıp açıldığında o listeyi kaybedeceğin için bu kontrolün ASP tarafında yapılması daha makul olacaktır.
    • psygnosis adlı üyenin fotoğrafı psygnosis
      evet ID side geliyor... ve Sayfa kapanmıyor.. yenilenme olmuyor.. başka sayfaya gitmiyor...

      jquery yeni öğreniyroum bunun Array leri biraz farklı bi örnek yapabilirmisin necmettin kardeş
      9 yıl önce yazılmış
    • necmettin adlı üyenin fotoğrafı necmettin
      javascript'teki array'lerde key yoktur, başka da büyük bir farkı yok.

      javascript kodlarına başladığın yerde, fonksiyonların dışında, bir global javascript değişkeni tanımlarsın, örneğin "ids=new Array();" ile.
      Sonra $.each'in içinde "ids.push(sorucevap.ID);" ile yeni gelen sorunun id'sini ids array'ine eklersin.
      gelen sorucevap.ID'nin ids array'inde olup olmadığını kontrol eden kısmı sana bırakıyorum.
      9 yıl önce yazılmış
    • necmettin adlı üyenin fotoğrafı necmettin
      Basit bir javascript fonksiyonu ile bir elemanın o array'de olup olmadığını kontrol edebilirsin:

      function array_element_exists( arr, elemname) {
      return (arr.indexOf(elemname) != -1);
      }

      Anlayacağın, indexOf Contains'in benzeridir ama false yerine -1, true yerine elemanın kaçıncı sırada olduğunu döndürür.
      9 yıl önce yazılmış
    • psygnosis adlı üyenin fotoğrafı psygnosis
      burda -1 değilse yani dizide yoksa mı oluyor.. :) -1 zaten bir şeyin olmaması onun değili pardon o zaman bu yazdıgın içeriyor demek.. Terimler karıştı :D
      9 yıl önce yazılmış
    • necmettin adlı üyenin fotoğrafı necmettin
      -1 ise yok, -1 değilse var demek. Dolayısıyla bu verdiğim fonksiyon o elemanın o dizide olup olmadığını veriyor.
      9 yıl önce yazılmış
  • adogan adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    2 cevap - 1 soru
    js ile pek aram yok bu kodlardan pek birşey anlamadım aslında ama c++ dersinde böyle bir işlem yapmıştık farklı çözüm yolları vardır. Mesela soru sayısı kadar bir dizi oluştur tüm değerleri 0 yap. rastgele gelen sayıyı kullanıp yine soruyu çağır. çağırdıktan sonra gelen sayıncı dizideki sıfırı 1 yap. sonra tekrar rastgele sayı iste. gelen sayıncı dizinin 1 olup olmadığını kontrol et. 1 ise tekrar sayı salla değilse devam et mantığında birşey yapabilirsin...
    • necmettin adlı üyenin fotoğrafı necmettin
      Soruları cevaplayacak kişinin kaç soru cevaplayacağı belli değilse bu yöntem işe yaramaz. Ayrıca örneğin 1000 soru cevaplayacaksa 1000 elemanlı bir array oluşturmak da hafıza açısından pek iyi bir çözüm olmuyor.
      9 yıl önce yazılmış
    • psygnosis adlı üyenin fotoğrafı psygnosis
      necmettin 25 soru cevaplıcak sadece... ya aslında mantık şöyle de

      document ready oldugunda bir soru geliyor..

      önce if(!dizi.contains(ID)) içermiyosa attık..

      dizi.add(ID);

      soruGetir(); yeni soru getir

      else

      soruGetir(); içeriosa da yeni soru getir dedik..Bu kısımda bir problem cıkabilir.. Ben bunu denedim ama olmadı ya da bir şeyi eksik yazdım


      javascript dizisinde contains kullanımı biraz değişik önce var dizi =new Array();

      Array.Contains(dizi,ID) burası true false döndürüyor...
      9 yıl önce yazılmış
    • necmettin adlı üyenin fotoğrafı necmettin
      Benim bildiğim javascript'te array'lerin Contains diye bir metodu yoktur, onun yerine indexOf kullanmak gerekiyor.
      Javascript tarafına örnek mantık:
      var  ids=new Array();
      function array_element_exists( arr, elemname) {
      return (arr.indexOf(elemname) != -1);
      } 
      function soru_getir() {
      soru = .... //burada $.ajax ile soruyu aldığımızı varsayıyorum
      if (ids.indexOf(soru.id) != -1) soru_getir();
      else {
      ids.push(soru.id);
      //soruyu göster
      }
      
      9 yıl önce yazılmış
    • adogan adlı üyenin fotoğrafı adogan
      senin tavsiye ettiğin yöntemde de 1000 elemanlı array oluşturacak hatta bi de her seferinde onları tek tek kontrol edecek. anlatmaya çalıştığım yöntemi dikkatli okursanız o anki gelen sayı baz alınarak, oluşturduğumuz 0 ve 1lerden array bir kere kontrol ediliyor. tavsiye ettiğin yöntemden çok daha az sorgu yapılıyor. hatta sadece 0 ve 1 leri tuttuğumuz için belki de senin dediğim yöntemden daha da az hafıza meşgul edilyor (bundan tam olarak emin değilim.). yanılıyosam düzeltin ben de uzman değilim bu konuda fikrimi söylüyorum sadece bir de ben c++ mantığında söylüyorum jsde belki değişiyodur işler..?
      9 yıl önce yazılmış
  • mcicek adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    37 cevap - 5 soru
    gizli bir inputta önceki sorunun id sini tutup ondan farklı değer gelmesini sağlayabilirsin.
    • psygnosis adlı üyenin fotoğrafı psygnosis
      açabilirmisin biraz ben mesela 25 soru cekicem input butona basınca gelen sorunun degeri öncekiyle değişicek mi? hidden içindeki değerle?

      Arrayla nasıl yapabiliriz Bunda Contains metodu yok galiba.
      9 yıl önce yazılmış
    • necmettin adlı üyenin fotoğrafı necmettin
      İyi bir çözüm değil bence, her seferinde önceki ID'ler kayboluyor çünkü.
      9 yıl önce yazılmış
    • mcicek adlı üyenin fotoğrafı mcicek
      //	Tüm idleri veritabanından alarak gizli inputa yazdım
      function getId()
      {
      	$.ajax
      	(
      		{
      			url: 'getir.aspx/tumIDLER',
      			success: function(rtn)
      			{
      				document.getElementById("hiddenInput").value=rtn;
      				getSoru();
      			}
      		}
      	);
      }
      
      //	gizli inputtaki değerleri split ile array haline getirip for döngüsü ile
      //	çekmeye başladım. çektiğim her değerden sonra idKaldir() 
      //	fonksiyonu ile çekmiş olduğum id yi gizli inputtan kaldırdım.
      function getSoru()
      {
      	var gncID=document.getElementById("hiddenInput").value;
      	sncID = gncID.split(',');
      	for (var i=1;i< sncID.length+1;i++)
      	{
      		$.ajax
      		(
      			{
      				url: 'getir.aspx?soruID='+sncID[i],
      				success: function(rtn)
      				{
      					document.getElementById("sorularDiv").innerHTML+=rtn;
      					idKaldir(sncID[i]);
      				}
      			}
      		);
      	}
      }
      
      
      
      function idKaldir(id)
      {
      	str =document.getElementById("hiddenInput").value;
      	newstr=str.replace(id+",","");
      	document.getElementById("hiddenInput").value=newstr;
      }
      
      


      Benim aklıma bu geldi şimdi,belki server ı kasıp ram şişirebilir ama aklıma gelen başka birşey yok şuan
      9 yıl önce yazılmış
    • psygnosis adlı üyenin fotoğrafı psygnosis
      Teşekkürler cevaplar için. Bunlardan bir şeyler çıkar herhalde ama alternatif cevapları da beklerim olan lütfen paylaşsın..

      Bşka bir soru şimdi soruların cevapları şıkları IsTrue şeklinde cevap tablomda duruyor onclickle hangisinin dogru oldugunun kntrolünü nasıl yaparım.. o iD ye sahip cevapların IsTruelarını getrip onclik le kontrolle nasl yprım
      9 yıl önce yazılmış
    • teacher0610 adlı üyenin fotoğrafı teacher0610
      Aslında bu işi sunucu tarafında yapabilirsin ve daha sağlıklı olur diye düşünüyorum. ajax ile soru istediğin sorugetir.php (örnek olarak) dosyasında bir $_SESSION["id"] gibi bir değişkende gönderdiğin sorunun id sini tut. Kulllanıcı yeni bir soru istediğinde mevcut sorunun id sine bakarak verdiği cevabı kontrol ettir, doğruysa, yeni bir soru gönderirsin , değilse işlem yaptırmazsın. Ben buna benzer bir mantığı kendi sitemde kullanıyorum. incelemek istersen eğer :

      www.sinavagir.net e girip bakabilirsin. İnceledikten sonra kod konusunda yardımcı olurum...
      9 yıl önce yazılmış
    • psygnosis adlı üyenin fotoğrafı psygnosis
      evet güzelmiş benzer iş istiyorum bende işte.. ama sayfa yenilemesi yok bende bir soru gidiyor diğeri geliyor.. Benim sistemin söyle
      $.ajax

      {
      url:.aspx/WEBMETHOD bu metodla soru ve cevapları geliyor...

      success: burda gelen sonucu işliyorum olay burda zaten

      }
      9 yıl önce yazılmış
    • psygnosis adlı üyenin fotoğrafı psygnosis
      evet güzelmiş benzer iş istiyorum bende işte.. ama sayfa yenilemesi yok bende bir soru gidiyor diğeri geliyor.. Benim sistemin söyle
      $.ajax

      {
      url:.aspx/WEBMETHOD bu metodla soru ve cevapları geliyor...

      success: burda gelen sonucu işliyorum olay burda zaten

      }
      9 yıl önce yazılmış
    • psygnosis adlı üyenin fotoğrafı psygnosis
      abi yalnız ben soruları tek tek çekiyorum... sen hepsini bi arada istemişin
      9 yıl önce yazılmış
    • necmettin adlı üyenin fotoğrafı necmettin
      O kontrolü soruları tek tek veren betikte yapmak, soruyu çektikten sonra yapmaktan daha makul bir çözüm olacaktır.
      9 yıl önce yazılmış