PDA

View Full Version : آجاکس در کدایگنایتر



pary_daryayi
چهارشنبه 17 اردیبهشت 1393, 08:27 صبح
سلام دوستان.
من با آجاکس در کنترلر مشکل دارم .
کد 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
چهارشنبه 17 اردیبهشت 1393, 10:42 صبح
CSRF فعال هست ؟ تو Console اررو چی میده ؟

pary_daryayi
چهارشنبه 17 اردیبهشت 1393, 11:30 صبح
بله 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
چهارشنبه 17 اردیبهشت 1393, 13:08 عصر
اگر میخواین از ajax post استفاده کنید باید داخل دیتا ها token csrf ci رو ارسال کنید چون وقتی csrf فعال باشد هر در خواست post که ارسال میشه token اون درخواست هم چک میشه .

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

pary_daryayi
چهارشنبه 17 اردیبهشت 1393, 14:09 عصر
ممنونم ولی درست نشد .
اولش 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
چهارشنبه 17 اردیبهشت 1393, 14:55 عصر
کد 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
چهارشنبه 17 اردیبهشت 1393, 19:25 عصر
ممنونم ولی نمیدونم چرا جواب نمیده . بازم میره صفحه ی اصلی .
این تکه کد کار میکنه :


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

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

MRmoon
چهارشنبه 17 اردیبهشت 1393, 19:27 عصر
یک بار اون آدرس رو که با ajax فراخونیش میکنین دستی در مرورگر بزنین ببینین اصلا باز میشه یا نه.

pary_daryayi
چهارشنبه 17 اردیبهشت 1393, 19:29 عصر
بله اینو هم تست کرده بودم باز میشه و مشکلی نداره

plague
چهارشنبه 17 اردیبهشت 1393, 19:42 عصر
تو فایرباگ چک کردی ؟
اگه میتونی یجا آنلاینش کن

pary_daryayi
جمعه 19 اردیبهشت 1393, 07:56 صبح
اينجا گذاشتم .
(http://web-site-man.ir/chat)ممنون ميشم نگاه كنيد

MRmoon
جمعه 19 اردیبهشت 1393, 10:51 صبح
اینجای فایلtest.js اشتباهه:

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

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

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

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

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

MRmoon
جمعه 19 اردیبهشت 1393, 21:31 عصر
شما چرا تو فایل js از php کار گرفتی ؟؟؟

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

pary_daryayi
شنبه 20 اردیبهشت 1393, 16:11 عصر
اینو دوستان گفتن ،
کد اول منو دیدید ؟
اونجا php نداره ولی باز کار نمیکنه ...

plague
شنبه 20 اردیبهشت 1393, 16:51 عصر
این کد نمونه ای که آنلاین کردین که مشکل سینتکس داره و کلا اجرا نیمشه

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


'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
یک شنبه 21 اردیبهشت 1393, 08:57 صبح
مشکل سینتکس رو حل کردم ، با این و بدون این کد هم امتحان کردم : (در هلپر هم 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
یک شنبه 21 اردیبهشت 1393, 08:59 صبح
اگر ممکنه یک نمونه کد ساده که اطلاعات رو از فایل js به کنترلر بفرسته و بعد در view نمایش بده ، لطفا بدین تا اونو تست کنم .
یک خط کد ساده که با base_url مشکلی نداشته باشه و تو سیستم خودتون کار کنه .
و اگه نیازی نیست CSRF هم false باشه و از cookie استفاده نشه .
ممنون میشم . کارم به خاطر این آجاکس متوقف مونده .

plague
یک شنبه 21 اردیبهشت 1393, 17:17 عصر
میشه بگی این یعنی چی ؟


base_url + "chat/add"


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

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

pary_daryayi
یک شنبه 21 اردیبهشت 1393, 18:08 عصر
اون کد که گفتید یعنی چی از تو فیلم های آموزشی و کدهای دیگران دیدم ...
من هم اومدم یاد بگیریم ...

کد شما رو آنلاین گذاشتم .

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


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

plague
یک شنبه 21 اردیبهشت 1393, 20:33 عصر
در مورد کدی که انلاین کردی :
من که بهت گفتم تو خوده صفحه بزار ! وقتی تو فایل .js بزاری کار نمیکنه کد های php
شما که باز رفتی کد من رو گزاشتی تو فایل .js

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



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

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


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

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



base_url + "chat/add"

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

ویرایش :

جستجو کردم این تاپیک (http://stackoverflow.com/questions/20045162/event-returnvalue-is-deprecated-please-use-the-standard-event-preventdefault) انگار میگه باید یک ورژن دیگه ای از library لود بشه :
http://code.jquery.com/jquery-git.js

این رو لود کردم ؛ الان خطای کنسول ندارم ولی alert(no ) اجرا میشه .
آنلاینه : (http://web-site-man.ir/chat)

plague
دوشنبه 22 اردیبهشت 1393, 18:50 عصر
خب الان که دیگه مشکلی نیست ؟
همون کد اولت هم درسته فقط این قسمت رو


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
سه شنبه 23 اردیبهشت 1393, 18:04 عصر
تقریبا حل شد ، ازتون ممنونم که وقت گذاشتین و راهنمایی کردید .