Giriş yapmadınız.

#1 07.03.2013 19:45:48

Pirovla
Üye
Kayıtlı: 26.12.2012
Mesajlar: 43

Ajax birden fazla veri alma

Merhaba,

Bir alana tıklandığında ajax ile veri gönderiyorum ve 2 farklı div'e veri döndürmek istiyorum. Tek div olduğunda yapabildim ama 2 veri almayı başaramadım. İki ayrı sorgu yapmayı, birisinden dönüş olmazsa sorun çıkarabileceği için tercih etmedim. Tek ajax isteği ile halletmek istiyorum.

$sol = View::make('home.sol')->with('kitap', Kitap::find($blink->kitap_id));
$sag = View::make('home.sag')->with('user', User::find($blink->user_id));
$data[] = $sol;
$data[] = $sag;
return $data;

şeklinde veriyi döndürüp, javascript ile farklı divlere yazdırmak istiyorum. Ama dönen veri html biçiminde değil daha farklı biçimde dönüyor. Acaba bunu nasıl yapabilirim veya farklı bir şekilde yapabilir miyim?

Çevrimdışı

#2 07.03.2013 22:55:57

drlinux
Moderatör
Yer: İstanbul
Kayıtlı: 28.12.2012
Mesajlar: 98
Website

Yanıt: Ajax birden fazla veri alma

Anlattıklarınızdan tam olarak bir şey anladığımı söylemem imkansız ama anladığım kadarıyla:

$sol = View::make('home.sol')->with('kitap', Kitap::find($blink->kitap_id));
$sag = View::make('home.sag')->with('user', User::find($blink->user_id));
$data = array();
$data['sol'] = $sol;
$data['sag'] = $sag;
return $data;

Man is a slow, sloppy and brilliant thinker; the machine is fast, accurate and stupid. ~ William M. Kelly

Çevrimdışı

#3 08.03.2013 03:58:13

Pirovla
Üye
Kayıtlı: 26.12.2012
Mesajlar: 43

Yanıt: Ajax birden fazla veri alma

Evet aceleyle yazarken biraz karıştırmışım, şimdi daha açık bir şekilde yazayım.

Öncelikle controller içinde echo ya da return View:make(....) yapınca çıktısı bildiğimiz html oluyor.
Ancak bu View'i değişkene atayıp json ile gönderip view dosyasının içinde bakınca çıktı bu view:make nesnesi oluyor, bu nesnenin özellikleri gözüküyor.

Benim yapmak istediğim bir objeye tıklandığında o objenin id'sini alıp controller'a ajax ile yollaması. Daha sonra controller'da o id'ye bağlı 2 ayrı özellik çekip, 2 farklı div'de göstermek istiyorum. Bu özellikler Kitap ve User nesneleri olsun. Bu noktada yaptığım şey, yukarıda da gösterdiğim gibi

public function post_blinkclick(){
	$blink = Input::get('blink');
	$blink = Blink::find($blink);
	$sol = View::make('home.sol')->with('kitap', Kitap::find($blink->kitap_id));
	$sag = View::make('home.sag')->with('user', User::find($blink->user_id));
	$data = array();
	$data['sol'] = $sol;
	$data['sag'] = $sag;
	return json_encode($data);
}

Buradan gelen veri ise aşağıdaki view dosyasına dönüyor:

	    	$.ajax({
	    		url: 'clickblink',
	    		type: 'POST',
	    		data: 'blink=' + id,
	    		dataType :'json',
	    		async: false,
	    		success: function(data){
    				$('#sol').html(data));
	    		}

Firebug ile incelediğimde, array ile gelen veriyi düzene soktuğumda şöyle gözüküyor:

{"sol":{
	"view":"home.sol",
	"data":{
		"errors":{
			"messages":[],
			"format":":message"},
		"kitap":{
			"attributes":{
				"id":2,
				"adi":"Kar",
				"yil":null,
				"yazar_id":2,
				"info":null,
				"created_at":"0000-00-00 00:00:00",
				"updated_at":"0000-00-00 00:00:00"},
			"original":{
				"id":2,
				"adi":"Kar",
				"yil":null,
				"yazar_id":2,
				"info":null,
				"created_at":"0000-00-00 00:00:00",
				"updated_at":"0000-00-00 00:00:00"},
			"relationships":[],
			"exists":true,
			"includes":[]}},
	"path":"C:\\wamp\\www\\kitap\\application\\views\\home\/sol.blade.php"},
"sag":{
	"view":"home.sag",
	"data":{
		"errors":{
			"messages":[],
			"format":":message"},
		"user":{
			"attributes":{
				"id":2,
				"username":"utku",
				"email":"***",
				"sifre":"***",
				"avatar":"",
				"facebook":"",
				"twitter":"",
				"created_at":"0000-00-00 00:00:00",
				"updated_at":"0000-00-00 00:00:00"},
			"original":{
				"id":2,
				"username":"utku",
				"email":"***",
				"sifre":"***",
				"avatar":"",
				"facebook":"",
				"twitter":"",
				"created_at":"0000-00-00 00:00:00",
				"updated_at":"0000-00-00 00:00:00"},
			"relationships":[],
			"exists":true,
			"includes":[]}},
	"path":"C:\\wamp\\www\\kitap\\application\\views\\home\/sag.blade.php"}}

Array yapmadan sadece Kitap değişkenini yollasam böyle oluyor:

<div class="well">

Kar<br>
Orhan Pamuk
</div>

Sonuç olarak, controller içinde View::make ile iki ayrı sayfayı oluşturup view dosyama gönderip iki farklı div'e eklemek istiyorum ancak başaramadım. Nerede hata yapıyorum?
Yine çok fazla detay verip karıştırmış olabilirim, eğer öyleyse şimdiden özür dilerim.

Çevrimdışı

#4 08.03.2013 12:14:23

drlinux
Moderatör
Yer: İstanbul
Kayıtlı: 28.12.2012
Mesajlar: 98
Website

Yanıt: Ajax birden fazla veri alma

sag ve sol alanları için ayrı ayrı route oluşturun. gelen veriyi html olarak alın ve alanlara jquery yardımıyla atayın. tabi sol ve sağ için view dosyası da yaratmanız gerekecek... Json a çevirmek anlamsız...


Man is a slow, sloppy and brilliant thinker; the machine is fast, accurate and stupid. ~ William M. Kelly

Çevrimdışı

#5 08.03.2013 15:51:25

Pirovla
Üye
Kayıtlı: 26.12.2012
Mesajlar: 43

Yanıt: Ajax birden fazla veri alma

Biraz araştırdım ve nasıl yapacağımı buldum.

Sağ ve sol için ayrı route yapabilirdim ancak birinde herhangi bir iletişimsizlik sonucunda eksik bilgi almış olacaktım, bunun olmasını istemedim. Nasıl yapılması gerektiği ise:

$sol = View::make('home.sol')->with('kitap', Kitap::find($blink->kitap_id))->render();
$sag = View::make('home.sag')->with('user', User::find($blink->user_id))->render();
return Response::json( array('sol' => $sol, 'sag' => $sag ));

render() metoduyla html çıktısını değişkene atayarak kullanabiliyormuşuz.

Çevrimdışı

#6 08.03.2013 16:10:18

sineld
Yönetici
Yer: Bursa
Kayıtlı: 26.12.2012
Mesajlar: 1,477
Website

Yanıt: Ajax birden fazla veri alma

Çözümü paylaştığın için teşekkürler Pirovla.

Çevrimdışı

Forum alt kısmı