# زبان های اسکریپتی > PHP > CodeIgniter >  آجاکس در کدایگنایتر

## pary_daryayi

سلام دوستان.
من با آجاکس در کنترلر مشکل دارم . 
کد view:

<div id="chat_input">	<input id="chat_message" name="chat_message" type="text" value="" tabindex="1" />	<?php echo anchor('#','SAY IT' ,array('title'=>'this is title' , 'id'=>'submit_message')); ?></div>

کد js :

$(document).ready(function(){
						   
	$('#submit_message').click(function(){
	
		alert($('input#chat_message').val());
		return false;
				
	});
});


تا اینجا مشکلی نیست و کار میکنه   ،  اما وقتی بخوام با کنترلر کار کنم جواب نمیده :
کد js اگه این باشه :

$(document).ready(function(){
						   
	$('#submit_message').click(function(){
			
		var message_post = $('input#chat_message').val();
		$.ajax({
			 type:'POST',
			 url : base_url + "chat/add",
			 /* url:"http://localhost/mysite/CI-project/chat/add",*/
			 data:{'message_post' : message_post},
			 success: function(data){
				 if(data == 1){
						alert('ok');	 
					 }
					 else
					 {
						alert('no'); 
					 }
				 
				 }
			});
		
	});
});


و controller ساخته شده بنام chat.php :

  public function add()	 {	 			echo 'yes';			 }

با کلیک روی لینک , به url گفته شده نمیره و به صفحه ی اصلی و welcome میره .
مشکل کجاست ؟
ممنون میشم راهنمایی کنید .
در ضمن url هم درسته , حتی بدون base_url هم امتحان کردم نتیجه نداد .

----------


## engmmrj

CSRF فعال هست ؟ تو Console اررو چی میده ؟

----------


## pary_daryayi

بله true هست :

$config['csrf_protection'] = TRUE;$config['csrf_token_name'] = 'csrf_test_name';$config['csrf_cookie_name'] = 'csrf_cookie_name';$config['csrf_expire'] = 7200;

اصلا خطایی اتفاق نمیفته , فقط انگار url رو نمیشناسه که بره به کنترلر مربوطه .
میره صفحه ی اصلی welcome .
تو کنسول خطایی ندیدم .
چطوری باید چک کنم ؟

----------


## engmmrj

اگر میخواین از ajax post استفاده کنید باید داخل دیتا ها token csrf ci رو ارسال کنید چون وقتی csrf فعال باشد هر در خواست post که ارسال میشه token اون درخواست هم چک میشه .
 var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>"

----------


## pary_daryayi

ممنونم ولی درست نشد .
اولش false بود که نتیجه نمیداد .
بعد true کردم و کد js رو به این شکل نوشتم و باز نتیجه نداد :

$(document).ready(function(){
                           
    $('#submit_message').click(function(){
            
        
        var message_post = $('input#chat_message').val();
        var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>",
        
        $.ajax({
             type:'POST',
             url:"http://localhost/mysite/CI-project/chat/add",
             data:{'message_post' : message_post ,'cookie_csrf',cookie_csrf},
             success: function(data){
                 if(data == 1){
                        alert('ok');     
                     }
                     else
                     {
                        alert('no'); 
                     }
                 
                 }
            });
        
    });
});


البته من اصلا نمیدونم مبحث token برای چیه , ولی با غیر فعال بودنش هم نتیجه نداد .

----------


## engmmrj

کد jquery تون هم مشکل داشت ، کد زیر رو تست کنید
$(document).ready(function(){
                            
    $('#submit_message').click(function(e){
             e.preventDefault();
         
        var message_post = $('input#chat_message').val();
        var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>",
         
        $.ajax({
             type:'POST',
             url:"http://localhost/mysite/CI-project/chat/add",
             data:{message_post : message_post ,csrf_test_name : cookie_csrf},
             success: function(data){
                 if(data == 1){
                        alert('ok');    
                     }
                     else
                     {
                        alert('no');
                     }
                  
                 }
            });
         
    });
});

----------


## pary_daryayi

ممنونم ولی نمیدونم چرا جواب نمیده . بازم میره صفحه ی اصلی . 
این تکه کد کار میکنه :

$(document).ready(function(){                                $('#submit_message').click(function(){             alert($('input#chat_message').val());        return false;                     });});

ولی وقتی آجاکس وارد میشه دیگه کار نمیکنه ،

----------


## MRmoon

یک بار اون آدرس رو که با ajax فراخونیش میکنین دستی در مرورگر بزنین ببینین اصلا باز میشه یا نه.

----------


## pary_daryayi

بله اینو هم تست کرده بودم باز میشه و مشکلی نداره

----------


## plague

تو فایرباگ چک کردی ؟ 
اگه میتونی یجا آنلاینش کن

----------


## pary_daryayi

اينجا گذاشتم . 
ممنون ميشم نگاه كنيد

----------


## MRmoon

اینجای فایلtest.js  اشتباهه:

var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>",
باید اینجوری باشه:
var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>";

----------


## pary_daryayi

ممنونم ولی انگار ارتباطی به خطای syntax ای نداره ، باز هم نتیجه نداد .
دوستان کار با آجاکس تو کدایگنایتر نکته ی خاصی داره ؟ 
چیزی باید true یا فعال بشه ؟ 
جستجو هم کردم بی نتیجه بود .

----------


## engmmrj

علت اینکه کار نمیکنه انکه شما کدهارو توی یک فایل js گذاشتی و تو فایل js دستورات php کار نمیکنه ، لطفا اون کدی من بهتون دادم رو توی صفحه html بگذارید و تست کنید اگر هم نشد آپلود کنید تا بررسی کنیم .

----------


## pary_daryayi

ممنونم  .
منظورتون از اینکه تو صفحه ی html بزارم چیه ؟
فایل view من اسمش هست chat.php که در اون ، این فایل js رو لود کردم .
یعنی کدهای js رو تو یک صفحه  با پسوند html ذخیره کنم و در فایل view  با include فراخوانی کنم  ؟
برام مبهمه ، ممنون میشم بیشتر توضیح بدید .

در ضمن من چند نمونه کد دیدم که شبیه همین کاری که انجام دادم نوشتند ، یعنی فایل js رو فراخوانی کردند و ajax کار کرده .

----------


## MRmoon

شما چرا تو فایل js از php کار گرفتی ؟؟؟

var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>",

----------


## pary_daryayi

اینو دوستان گفتن ،
کد اول منو دیدید ؟ 
اونجا php نداره ولی باز کار نمیکنه ...

----------


## plague

این کد نمونه ای که آنلاین کردین که مشکل سینتکس داره و کلا اجرا نیمشه

درستش کن اونجات که نوشتی

'cookie_csrf',cookie_csrf

باید بشه

'cookie_csrf':cookie_csrf

دوم اینکه وقتی شما بری کد ها رو تو فایل .js بزاری دستورات php هیچکدوم کار نمیکنن از جمله base_url تو نمونه کدی که اول گزاشتی هم  اشتباه نوشتی 


```
 url : base_url + "chat/add",
```

باید بنویسی 


```
 url : + "<?php echo base_url(); ?>chat/add",
```

 
اینو بزار توی خود صفحت و اون فایل test.js رو پاک کن 



             
$(document).ready(function(){
                           
    $('#submit_message').click(function(){
        var message_post = $('input#chat_message').val();
        var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>";
        $.post( "<?php echo base_url(); ?>chat/add" , {message_post: message_post ,cookie_csrf:cookie_csrf} , function(data){
            if(data == 1)
            alert('ok');     
            else
            alert('no'); 
        })
    });
});





--------------------------------------------------------------

در ضمن من تا به حال از crf استفاده نکردم و نمیدونم اینکه شما نوشتی 



```
        var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>";
```

آیا درسته یا نه و اصلا 
$_COOKIE['csrf_cookie_name']

خروجی داره یا اررور میده (که در صورت اررور دادن میتونه کل تابع ایجکس رو مختل کنه )

ولی
 1 :  یبار تو صفحه همنیجوری پرینتش کن ببین خروجیش چیه که مطمئن بشی خروجی درستی داره بعد بزارش تو تابج جاوا اسکریپتت
2  : اینجوری که من دیدم تو سرچ هام به نظر میاد درستش اینه : 

$this->security->get_csrf_token_name();

----------


## pary_daryayi

مشکل سینتکس رو حل کردم ، با این و بدون این کد هم امتحان کردم : (در هلپر هم cookie لود شده)

 var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>";

کدهایی که گفتید رو جایگزین کردم ؛
این هم خروجی داشت :

$_COOKIE['csrf_cookie_name']


ولی باز جواب نمیده ،(البته آنلاینش نکردم)

من یک فیلمی دیدم ، مثل این هم مینوسیم باز جواب نمیده ، از json استفاده کرده :
عکس قسمت js رو گذاشتم :
کد من با توجه به فیلم :

$(document).ready(function(){
                            
    $('#submit_message').click(function(){
        var message_post = $('input#chat_message').val();
        $.post( base_url + "chat/add" , {message_post: message_post} , function(data){
            alert(data) ;
        },"json");
		return false;
    });
});

----------


## pary_daryayi

اگر ممکنه یک نمونه کد ساده که اطلاعات رو از فایل js به کنترلر بفرسته و بعد در view نمایش بده ،  لطفا بدین تا اونو تست کنم .
یک خط کد ساده که با base_url مشکلی نداشته باشه و تو سیستم خودتون کار کنه .
و اگه نیازی نیست CSRF هم false باشه و از cookie استفاده نشه .
ممنون میشم . کارم به خاطر این آجاکس متوقف مونده .

----------


## plague

میشه بگی این یعنی چی ؟ 



```
 base_url + "chat/add"
```


base_url  رو از کجا آوردی ؟ 

من کد رو بهت دادم بالا حالا شما حالش رو نداری آنلاین کنی دیگه ....

----------


## pary_daryayi

اون کد که گفتید یعنی چی از تو فیلم های آموزشی و کدهای دیگران دیدم ... 
من هم اومدم یاد بگیریم ... 

کد شما رو آنلاین گذاشتم .
CSRF هم false هست و از این کد هم چون شما گفتین استفاده نمیکنید ، استفاده نکردم ( پیشنهاد دوستان دیگه بود )

var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>";

----------


## plague

در مورد کدی که انلاین کردی : 
من که بهت گفتم تو خوده صفحه بزار ! وقتی تو فایل .js بزاری کار نمیکنه کد های php
شما که باز رفتی کد من رو گزاشتی تو فایل .js  

اونم راه داره ولی براشمایی که تو js مبتدی هستی فعلا تو خوده صفحت بزار کد رو 





> اون کد که گفتید یعنی چی از تو فیلم های آموزشی و کدهای دیگران دیدم ... 
> من هم اومدم یاد بگیریم ...


خب کامل نگاه نکردی 
اونی که آموزش داده حتما یجا نوشته

var base_url = '<?php echo base_url(); ?>';

که تونسته بعدش بنویسه آدرس رو به این شکل 


 base_url + "chat/add"

----------


## pary_daryayi

گذاشتم تو خود صفحه .
الان تو کنسول این خطا رو میده :
event.returnValue is deprecated. Please use the standard event.preventDefault() instead. 
------------------------

ویرایش :

جستجو کردم این تاپیک  انگار میگه  باید یک ورژن دیگه ای از library لود بشه :
http://code.jquery.com/jquery-git.js

این رو لود کردم ؛ الان خطای کنسول ندارم ولی alert(no  ) اجرا میشه .
آنلاینه :

----------


## plague

خب الان که دیگه مشکلی نیست ؟ 
همون کد اولت هم درسته فقط این قسمت رو 

             url : base_url + "chat/add",

رو اشتباه نوشتی برای این ارسال نمیشه 

اون base_url رو وقتی به این شکل بنویسی یعنی یه متغیر جاوا اسکریپته که مقداری توش داره 
در حالی که شما این متغییر رو تعریف نکردی اصلا و مقداری نداره (در پست قبل گفتم چجوری ) 


-------------
شما اگه میخای توی فایل .js ببری کد هات رو باید مقادیری که  از php میگیری رو قبل از فراخانی اون فایل .js بریزی توی متغیر های جاوا اسکریپتی گلوبال (خارج از هرگونه اسکوپ کد - {})  اونوقت صفحه .js رو ضمیمه کنی تو کدت و توی اون درسته که به متغیر های php دسترسی نداری ولی متغیر های جاوااسکریپتی معادلشون رو داری








```

<Script>
var base_url = '<?php echo base_url(); ?>';
var cookie_csrf ="<?PHP echo($_COOKIE['csrf_cookie_name']);?>"; 
</script>

<script src="test.js" ></script>
```

----------


## pary_daryayi

تقریبا حل شد ، ازتون ممنونم که وقت گذاشتین و راهنمایی کردید .

----------

