PDA

View Full Version : سوال: ارسال دو مقدار با ajax jquery و در یافت با php



yeksib
چهارشنبه 11 بهمن 1391, 12:53 عصر
سلام
همونطور که از سوالم مشخصه من میخوام با استفاده از ajax ای دی یک پست رو بگیرم


<a href="#" name="like" id="<?php $recity->id?>" class="like" />
<a href="#" name="dislike" id="<?php $recity->id?>" class="bad" />


و به یک صفحه دیگه ارسال کنم.یعنی توی به صفحه ی دوم like و یا dislike ارسال بشه!؟

siavashsay
چهارشنبه 11 بهمن 1391, 13:58 عصر
شما باید اینطوری کدت رو تغییر بدی :

<a href="#" name="like" id="<?php $recity->id?>" class="like" onclick="doLike('<?php echo $recity->id?>')"/>
بعد در اسکریپت jQuery خودت از این تابع استفاده کنی :

<script>
$(document).ready(function(e) {
function doLike(id){
$.post("like.php",{id:id});
};
});
</script>
( البته فراموش نشه که فایل jquery رو حتما ضمیمه کنید )
در این کد شما یک تابع ساختید که در صورت کلیک بروی اون مقدار ID به صفحه like.php به صورت POST فرستاده میشه !
توی اون کد اولی هم که براتون تغییر دادم در صورت کلیک بروی اون لینک شما مقدار ID اون لینک رو به تابع doLike میفرستید و اون تابع همونطور که گفتم مقدار ID شما رو به صفحه like.php میفرسته !
اینم کد صفحه like.php :

if(isset($_POST['id'])){
$id=$_POST['id'];
// dom anything with $id
}

yeksib
چهارشنبه 11 بهمن 1391, 14:19 عصر
شما باید اینطوری کدت رو تغییر بدی :

<a href="#" name="like" id="<?php $recity->id?>" class="like" onclick="doLike('<?php echo $recity->id?>')"/>
بعد در اسکریپت jQuery خودت از این تابع استفاده کنی :

<script>
$(document).ready(function(e) {
function doLike(id){
$.post("like.php",{id:id});
};
});
</script>
( البته فراموش نشه که فایل jquery رو حتما ضمیمه کنید )
در این کد شما یک تابع ساختید که در صورت کلیک بروی اون مقدار ID به صفحه like.php به صورت POST فرستاده میشه !
توی اون کد اولی هم که براتون تغییر دادم در صورت کلیک بروی اون لینک شما مقدار ID اون لینک رو به تابع doLike میفرستید و اون تابع همونطور که گفتم مقدار ID شما رو به صفحه like.php میفرسته !
اینم کد صفحه like.php :

if(isset($_POST['id'])){
$id=$_POST['id'];
// dom anything with $id
}

خوب حالا من چطوری بفهمم که روی like کلیک شده یا dislike !؟

siavashsay
چهارشنبه 11 بهمن 1391, 14:26 عصر
دوست عزیز !
اولا اینکه من میدونم شما دقیقا میخوای چیکار کنی ! این پروژه ای که الان داری روش کار میکنی رو من پارسال نوشتم و راحت بگم ( پدرررررم درومد ) !
من یک پروژه نوشتم دقیقققققا مثل لایک facebook ! دقیقا همون رو ! پس میدونم چی میخواید و هنوز چیزی که الان گفتم کامل نبود چون اینکار خیلی option داره اما خواستم یکی یکی بری جلو و خودت سوال کنی !
ثانیا ...
در اون کد من فقط در مورد like توضیح دادم ! روند ادامه کار برای dislike هم مثل همون لایک هست ! شما باید کد dislike رو هم اینطوری تغییر بدی :

<a href="#" name="dislike" id="<?php $recity->id?>" class="bad" onclick="doUnlike('<?php echo $recity->id?>') />
و یک صفحه برای اون مثل لایک اما به نام unlike.php درست کنی که عملیات unlike توی اون انجام شه !
و همچنین یک تابع دیگه مثل doLike با jQuery درست کنی اما به نام doUnlike

<script>
$(document).ready(function(e) {
function doUnlike(id){
$.post("unlike.php",{id:id});
};
function doLike(id){
$.post("like.php",{id:id});
};
});
</script>
که این کد متغیر رو به صفحه unlike میفرسته که باید عملیات رو توی اون اجرا کنید !
اما نخواستم طولانیش کنم و گفتم احتمالا خودتون متوجه میشید دیگه !
-----
فقط اینو بگم ! به همین راحتی نیست :قهقهه: هنوز باید خیلی چیزا به این کدها اضافه شه که بعدا متوجه میشی ! اما فعلا پله پله برو جلو !
سوالی هم داشتی بپرس !

yeksib
چهارشنبه 11 بهمن 1391, 14:32 عصر
باشه دوست من ، تمامی توابعش و ... نوشتم و همه ی چیزهایی که میگید! مشکلی نیست .فقط من چون زیاد جیکوئری وارد نیستم مجبور شدم همچین سوال راحت و مسخره ای بپرسم.
به هر حال متشکرم مشکلی برخوردم سوال میکنم!
یا علی

siavashsay
چهارشنبه 11 بهمن 1391, 14:35 عصر
دوست عزیز !
اینم بگم شما به مقدار برگشتی هم نیاز دارید !
مثلا اگر یکی Like میزنه باید جلوی اون عدد لایکها +1 بشه ( در همون لحظه ! ) و برای unlike هم همینطور !
اگر پروژتون اینطوری بود بگید که اونم بهتون بگم !
موفق باشید !

yeksib
چهارشنبه 11 بهمن 1391, 14:40 عصر
دوست عزیز !
اینم بگم شما به مقدار برگشتی هم نیاز دارید !
مثلا اگر یکی Like میزنه باید جلوی اون عدد لایکها +1 بشه ( در همون لحظه ! ) و برای unlike هم همینطور !
اگر پروژتون اینطوری بود بگید که اونم بهتون بگم !
موفق باشید !

بله تقریبا همین طوری ؛ ببینید اگه لایک زد توی دیتابیس یکی به لایک ها اضافه میشه و اگه unlike رو زد یکی به unlike اضافه بشه!؟
با تشکر

siavashsay
چهارشنبه 11 بهمن 1391, 15:11 عصر
بسیار خوب !
به کد صفحه ای که نوشتم توجه کنید !
صفحه (مثلا ) index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js" type="text/javascript"></script>
<script>
$(document).ready(function(e) {
function doLike(id,val){
$.post("like.php",{id:id,val:val}, function (cback){
$("#numLikes").html(cback);
});
};


function doUnlike(id,val){
$.post("unlike.php",{id:id,val:val},function (cback){
$("#numUnlikes").html(cback);
});
};
});
</script>
</head>

<body>
<?php
//db connect
//$id = خودتون انتخاب کنید نحوه دریافت ایدی رو
$sql=mysql_query("SELECT `like`,`unlike` FROM `tb_name` WHERE `id`='$id'");
$obj=mysql_fetch_object($sql);
$numLikes=$obj->like;
$numUnlikes=$obj->unlike;
?>
<a href="#"><div id="like" onclick="doLike('<?php echo $id;?>','1')"><span>Like <?php echo $id;?></span><span id="numLikes"><?php echo $numLikes;?></span></div></a>
<a href="#"><div id="like" onclick="doLike('<?php echo $id;?>','1')"><span>Dislike <?php echo $id;?></span><span id="numUnlikes"><?php echo $numUnlikes;?></span></div></a>
</body>
</html>
توضحیح :
در ابتدا توابع doLike - doUnlike رو با jQuery تعریف میکنیم !
این توابع 2 مقدار id - val رو میفرستن به صفحهات مورد نظر و مقدار cback که همون عدد لایک و آنلایک هست رو برمیگردونن و اونها رو توسط کدهای

$("#numLikes").html(cback);
$("#numUnlikes").html(cback);

در span های مقدار لایک که آی دی اونها numLikes - numUnlikes هست قرار میدن ! ( در همون لحظه کلیک )
صفحه like.php

//db connect
if(isset($_POST['id']) && isset($_POST['val']) && $_POST['val']==1){
$id=$_POST['id'];
mysql_query("UPDATE `tb_name` SET `like`=`like`+1 WHERE `id`='$id'");
$sql=mysql_query("SELECT `like` FROM `tb_name` WHERE `id`='$id'");
$obj=mysql_fetch_object($sql);
$likes=$obj->like;
echo $likes;
}
این صفحه اول چک میکنه که ببینه مقادیر POST برای id - val موجود هست ( یعنی کلیک شده رو لایک یا نه ) یا نه و اگر مقادیر POST شده بودن به تعداد like های id مورد نظر +1 میکنه !
و در خط بعد نتیجه آخر رو ( منظور تعداد لایک ها هست ) رو echo میکنه که تابع jQuery در صفحه index.php اون مقدار رو میگیره و در همون span هایی که گفته شد قرار میده !
صفحه unlike.php

if(isset($_POST['id']) && isset($_POST['val']) && $_POST['val']==1){
$id=$_POST['id'];
mysql_query("UPDATE `tb_name` SET `unlike`=`unlike`+1 WHERE `id`='$id'");
$sql=mysql_query("SELECT `unlike` FROM `tb_name` WHERE `id`='$id'");
$obj=mysql_fetch_object($sql);
$unlikes=$obj->unlike;
echo $unlikes;
}
دقیقا مثل همون like.php هست اما تاثیرات اون در فیلد unlike هست !
---------
البته بازم تا جایی که شد خلاصه نوشتم !
باز هم سوالی بود بپرسید ! :)
موفق باشید

yeksib
چهارشنبه 11 بهمن 1391, 15:35 عصر
ببین من کلییت کار رو گرفتم این داره به دوتا صفحه جدا ارسال میکنه ! میتونیم هر دوتاش رو به یک صفحه ارسال کنیم !؟منظور همون id ها هستش یعنی به یک صفحه ارسال بشه با دو مقدار اونجا که داریم GET میکنیم بیاد بررسی بشه ببینه مقدار اول پر شده یا مقدار دوم سپس بر اساس اون بیاد کوئری رو اجرا کنه؟

siavashsay
چهارشنبه 11 بهمن 1391, 15:48 عصر
آره میشه !
شما میتونی اینکارو از طریق مقدار val که برابر با 1 قراردادم انجام بدی !
برای like مقدار val رو 1 بذار و برای unlike بذار 0 !
بعد به جای 2 تا صفحه like.php - unlike.php یک صفحه درست کن مثلا به نام action.php !
و بجای 2 تا تابع doLike - doUnlike یک تابع درست کنی مثلا به نام doAction
بعد اونجا چک کن ببین مقدار val صفر هست یا یک ! اگر 0 بود به unlike ها اضافه کنه و اگر 1 بود به like ها !
منظورم از مقدار val توی این کد هست :

onclick="doLike('<?php echo $id;?>','1')"
اون 1 مقدار val هست که POST میشه !
موفق باشید !

yeksib
چهارشنبه 11 بهمن 1391, 17:12 عصر
من آدرس صفحه ی که توش قرار رتبه سنجی انجام بشه به این صورته mysite.ir/iran/tehran بعد از این که روی لینک like کلیک میشه هدایت میشم صفحه اصلی mysite.ir/# این یک مشکل.
بعد من این دوتا رو ترکیب کردم و فرستادم به یک صفحه اما باید این؛

$("#numLikes").html(cback);

رو هم تغییر بدم!؟

siavashsay
چهارشنبه 11 بهمن 1391, 18:58 عصر
برای مشکل اولتون کلا تگ
<a href="#">....</a> رو بردارید و فقط همون Div بمونه ! چون ظاهرا اون iran - tehran متغیرهای GET هستند که تنظیم کردید اونطوری دریافت شه ! حالا اگر خواستید که نشانگر موس وقتی روی div رفت علامتش بشه علامت دست اون رو اینطوری بنویسید :

<div style="cursor:pointer" id="like" onclick="doLike('<?php echo $id;?>','1')"><span>Like <?php echo $id;?></span><span id="numLikes"><?php echo $numLikes;?></span></div>
در مورد مشکل دوم ! باید تابع خودتون رو اینطوری بنویسید :

<script>
$(document).ready(function(e) {
function doAction(id,val){
if(val==1){
$.post("like.php",{id:id,val:val}, function (cback){
$("#numLikes").html(cback);
});
}
if(val==0){
$.post("unlike.php",{id:id,val:val},function (cback){
$("#numUnlikes").html(cback);
});
}
}
});
</script>

yeksib
چهارشنبه 11 بهمن 1391, 19:09 عصر
برای مشکل اولتون کلا تگ
<a href="#">....</a> رو بردارید و فقط همون Div بمونه ! چون ظاهرا اون iran - tehran متغیرهای GET هستند که تنظیم کردید اونطوری دریافت شه ! حالا اگر خواستید که نشانگر موس وقتی روی div رفت علامتش بشه علامت دست اون رو اینطوری بنویسید :

<div style="cursor:pointer" id="like" onclick="doLike('<?php echo $id;?>','1')"><span>Like <?php echo $id;?></span><span id="numLikes"><?php echo $numLikes;?></span></div>
در مورد مشکل دوم ! باید تابع خودتون رو اینطوری بنویسید :

<script>
$(document).ready(function(e) {
function doAction(id,val){
if(val==1){
$.post("like.php",{id:id,val:val}, function (cback){
$("#numLikes").html(cback);
});
}
if(val==0){
$.post("unlike.php",{id:id,val:val},function (cback){
$("#numUnlikes").html(cback);
});
}
}
});
</script>

ولی اینطوری متاسفانه باز داره به دو صفحه متغییر رو ارسال میکنه!

siavashsay
چهارشنبه 11 بهمن 1391, 19:25 عصر
توی توابع جی کوئری که if بکار بردم دومی رو else و یا elseif کنید ببینید درست میشه یا نه ؟!

yeksib
جمعه 13 بهمن 1391, 14:30 عصر
توی توابع جی کوئری که if بکار بردم دومی رو else و یا elseif کنید ببینید درست میشه یا نه ؟!
ببین یک مشکلی پیدا کردم ؛ اصلا جی کوئری هایی که خودم اضافه میکنم اجرا نمیشه مثلا وقتی یک کد ساده مثل زیر رو اضافه میکنم ، خوب اول اجرا نمیشه اما وقتی تمامی script ها رو برمیدارم اجرا میشه

<script>
$(document).ready(function(){
$("pp").click(function(){
$(this).hide();
});
});
</script>
یعنی میخواهم بگم بقیه ی script ها مانع اجرا میشن چون خیلی چیز دیگه به این صفحه اضافه شدند از جمله اسلایدر و ... که هر کدومشون کلی کد جاوااسکریپت دارند!

siavashsay
جمعه 13 بهمن 1391, 14:51 عصر
دوست عزیز ! نیازی نیست برای هر کد یک تگ script درست کنی !
توی همون document.ready همه توابع و اسکریپتهای خودتونو بنویسید !

yeksib
جمعه 13 بهمن 1391, 15:28 عصر
کد زیر کد اسلایدرم هست که وقتی برشمیدارم باعث میشه بقه ی کد های جی کوئری که نوشتم اجرا بشه اما تا دوباره میذارمش دوباره کد های دست نویس از کار میافته!
اونطوری که شما هم میگفتید گذاشتم باز جواب نداد!؟
حالا ترکیب این کد باکد بالایی چی میشه؟


<script type="text/javascript">
$(document).ready(function() {
$.noConflict();
jQuery('#services-example-1').services(
{
width:820,
height:250,
slideAmount:4,
slideSpacing:30,
touchenabled:"on",
mouseWheel:"on",
hoverAlpha:"on",
slideshow:3000,
hovereffect:"on",
callBack:function() { }

});
});
</script>

yeksib
پنج شنبه 26 بهمن 1391, 19:21 عصر
دوست عزیز ! نیازی نیست برای هر کد یک تگ script درست کنی !
توی همون document.ready همه توابع و اسکریپتهای خودتونو بنویسید !

من فکر میکنم شما روی jquery تسلط دارید!
یک سوال خیلی کاربردی ؛ من توی یک صفحه php بعد از این که کاربر یه اطلاعاتی رو پر کرد به صورت ajax از یک صفحه ی دیگه اطلاعاتی رو میخونه و به کاربر نشون میده تا بقیه اطلاعات رو پر کنه ولی مشکلی که وجود داره اینه که توی فرمی که با ajax خونده شده تعدادی کد jquery استفاده شده ، که هیچ کدام از کد های jquery اجرا نمیشه !
من چه طور میتونم این مشکل رو برطرف کنم!؟

siavashsay
پنج شنبه 26 بهمن 1391, 23:21 عصر
آیا قبلا این کد ها درست کار میکرده ؟!
اگه این کدها کلا مشکل داشتند از اول ببینید فایل jquery درست ضمیمه شده ؟!
چک کنید ببینید که تداخل اسکریپت نداشته باشید!
حتی القمدور کدها رو بگذارید تا چک بشه :)

yeksib
پنج شنبه 26 بهمن 1391, 23:38 عصر
آیا قبلا این کد ها درست کار میکرده ؟!
اگه این کدها کلا مشکل داشتند از اول ببینید فایل jquery درست ضمیمه شده ؟!
چک کنید ببینید که تداخل اسکریپت نداشته باشید!
حتی القمدور کدها رو بگذارید تا چک بشه :)

این هم کد!


function changeform(str)
{
if (str=="")
{
// if blank, we'll set our innerHTML to be blank.
document.getElementById("form").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{ // code for IE7+, Firefox, Chrome, Opera, Safari
// create a new XML http Request that will go to our generator webpage.
xmlhttp=new XMLHttpRequest();
}
else
{ // code for IE6, IE5
// create an activeX object
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
// on state change
xmlhttp.onreadystatechange=function()
{
// if we get a good response from the webpage, display the output
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("form").innerHTML=xmlhttp.responseText;

}
}
// use our XML HTTP Request object to send a get to our content php.
xmlhttp.open("GET","class.php?form="+str, true);
xmlhttp.send();
}

نه کد هیچ مشکلی نداره و درست کار میکنه اما وقتی با ajax میخونمش و میخوام توی صفحه اصلی ازش استفاده کنم هیچ کدوم از jquery ها اجرا نمیشوند

siavashsay
جمعه 27 بهمن 1391, 10:53 صبح
ببینید منظور من از قرار دادن کد فقط تگهای مربوطه بود !
چند وقت پیش بنده یک سری کد داشتم به این صورت :

//script 1
<script>
function {
// any
}
</sctipt>

//script 2

<script>
$(document).ready(function{
//any
});
</script>
توی این حالت هر کار میکردم script 2 کار نمیکرد ! بعد اومدم جای اینها رو عوض کردم - یعنی script 2 که همون documnet.ready هست رو بردم اول و script 1 رو دوم !
بعد درست کار کرد !
متوجه شدم که document.ready همیشه باید اول و قبل بقیه script ها باشه !
امیدوارم منظورمو رسونده باشم !

yeksib
جمعه 27 بهمن 1391, 11:18 صبح
ببینید منظور من از قرار دادن کد فقط تگهای مربوطه بود !
چند وقت پیش بنده یک سری کد داشتم به این صورت :

//script 1
<script>
function {
// any
}
</sctipt>

//script 2

<script>
$(document).ready(function{
//any
});
</script>
توی این حالت هر کار میکردم script 2 کار نمیکرد ! بعد اومدم جای اینها رو عوض کردم - یعنی script 2 که همون documnet.ready هست رو بردم اول و script 1 رو دوم !
بعد درست کار کرد !
متوجه شدم که document.ready همیشه باید اول و قبل بقیه script ها باشه !
امیدوارم منظورمو رسونده باشم !

بله دقیقا پاسختون رو متوجه شدم ولی این تیکه کد jquery موقعی که من در حالت عادی توی صفحه استفاده میکنم جواب میده و هیچ مشکلی نداره ، ولی وقتی که با استفاده از ajax محتویات اون فرم به همراه کدهای jquery رو فرا می خونم هیچ کدم از jquery ها اجرا نمیشه!؟
این یک مشکلی که من خیلی وقته باهاش مواجه شدم و نمیتونم حلش کنم!
اما یک فرضیه ی به ذهنم رسیده ؛ اینه که ما وقتی از ajax استفاده میکنیم باعث میشه که کد های جاوااسکریپتی که در قسمت head لینک شده اند بر روی المان های جدیدی که فراخوانی شده توسط ajax نتواند هیچ تاثییری بگذارد حالا نیمدونم فرضیم درسته یا نه ولی از دوستانی که در این زمینه تخصص دارند میخواهم که کمکم کنند!