22
تشکر

بازگشت چند متغیر توسط JSON در ajax

JSON

JSON

در گذشته مطلبی با عنوان “آشنایی با JSON” در آپارنت داشتیم، که با این زبان نشانه گذاری متن آشنا شدیم و همچنین گفتیم که از این زبان برای انتقال داده ها استفاده میکنیم.

در این مطلب میخواهیم در عمل با JSON آشنا شویم. فرض کنید میخواهیم با استفاده از ajax دو عدد را به یک فایل PHP ارسال کنیم، و در این فایل PHP، عملیاتی بر روی دو عدد انجام دهیم و آنها را به صفحه مقصد بازگشت دهیم.

اگر فقط ارسال و دریافت یک عدد لازم بود بدون JSON هم میشد این کار را انجام داد. اما وقتی حرف از بازگشت چند متغیر به وسط می آید، JSON حرف اول را میزند.

اگر با ajax در jQuery آشنایی ندارید میتوانید مطالب آموزش اول و دوم آن را مطالعه کنید.

در ادامه همراه ما باشید…

ابتدا در فایل index.php فرم خودمان را درست میکنیم، همچنین یک تگ h1 خالی نیز قرار میدهیم تا زمانی که اطلاعات را دریافت کردیم درون آن نمایش میدهیم.

<h1 id="info"></h1>
  
<form action="functions.php" id="form1">
  <label>Number One:</label>
  <input type="text" name="num1" /><br />
    
  <label>Number Two:</label>
  <input type="text" name="num2" /><br />
    
  <input type="submit" value="Send" />
</form>

سپس توسط تابع ajax در jQuery اطلاعات فرم را به فایل functions.php ارسال میکنیم.

$(document).on("submit", "#form1", function() {
  var dataString = $(this).serialize();
  $.ajax({
    type: "GET",
    url: "functions.php",
    data: dataString,
    success: function(data) {
      $('#info').text('Number one = ' + data.num1 + ' and number two = ' + data.num2);
    }
  });
  return false;
});

در کد بالا و در خط دوم توسط متد serialize کل اطلاعات فرم به همراه مقادیرشان را درون متغیر dataString قرار دادیم. تابع موجود در خط هفت برای زمانی است که عملیات ajax با موفقیت انجام شده است. درون این تابع و در خط هشت اطلاعات بازگشتی JSON را نمایش میدهیم. در واقع num1 و num2 در خط هشت اسامی فیلدهای موجود در JSON بازگشتی است که در فایل functions.php تعیین کردیم.

حال به فایل functions.php میرویم. و کدهای زیر را قرار میدهیم:

$num1 = $_GET['num1'];
$num2 = $_GET['num2'];

$num1 *= 2;
$num2 *= 4;

header("Content-Type: application/json");
echo json_encode(array('num1' => $num1, 'num2' => $num2));

در خط اول و دوم دو عدد را درون متغیرها قرار میدهیم. سپس در خط چهار و پنج عملیاتی بر روی اعداد انجام میدهیم. و سپس در خط هفت نوع اطلاعات را به JSON تغییر میدهیم و در خط بعدی توسط تابع json_encode اطلاعات را به صورت JSON چاپ میکنیم.

نکته: چاپ کردن اطلاعات در ajax مانند بازگشت (return) دادن آنها است.

اگر کدهای بالا را امتحان کنید خواهید دید توسط ajax دو متغیر را ارسال و آنها را به صورت JSON دریافت و نمایش میدهیم. شما میتوانید به جای دو متغیر از چندین متغیر نیز استفاده کنید.

  • رضا می‌گه:

    سلام
    اقا محسن اگر بخواهیم data.num1 رو وقتی از صفحه دوم به صفحه اول بر میگرده داخل یه متغیر php قرار بدیم که بتونم چند تا شرط روش ایجاد کنم باید چیکار کنم

  • سعید می‌گه:

    دوباره توضیح میدم.کامنت قبلی رو حذف کنید شلوغ نشه!
    بر فرض میخوام از صفحه ی index.php مقادیر json را دریافت کنیم.اما در فایل php کد زیر را که میذارم مقادیر بر نمیگرده

    include(“config.php”);
    header(“Content-Type: application/json”);
    echo json_encode(array(‘num1′ => $num1, ‘num2′ => $num2));

    از لحاظ php درسته و اگه توی مرورگر اون صفحه رو باز کنید مقادیر رو میبینید!
    اما به خاطر اینکلود کردن یک صفحه ی دیگه مقادیر رو Ajax بر نمیگردونه!!!!
    ولی وقتی include() رو حذف میکنم مقادیر بر میگرده وچاپ میشه تو صفحه ی درخواست دهنده ….یعنی مشکل از همینجاست!
    من وقتی فایل های دیگه ای اینکلود می‌کنم باز همین مشکل پیش میاد
    منظورم رو فهمیدید؟؟؟
    الان $num1 رو داخل یه فایلphp دیگه قراربدید (واز GET یکیشو نگیرید )و اینکلود کنید توی همین مثالتون می بینید که مقدار بر نمیگردونه!!!
    یا همون خطا ایجاد میشه !!!
    من به Ajax وphp تسلط کافی دارم و میخواستم از json استفاده کنم که به مشکل برخوردم توی این قضیه!!!

  • سعید می‌گه:

    آقا تا اینجا درست ومن میدونم
    اگر شما php کار کرده باشید میدونید یکه وقتی یه فایل رو اینکلود میکنیم در نمایش html یه سطر خالی بوجود میاد!من برای رفع مشکل اینکلود ها رو داخل کامنت اچ تی ام ال و… قرار میدم
    اما در باره ی جیسون نمیشه!!! و اون سطر خالی بوجود نمیاد و هم متغیر ها بر نمیگردند!!!! چیکار کنم به نظرت؟
    منظورمinclude(“”); هستش….

  • محمد می‌گه:

    سلام، محسن عزیز ممنون که خیلی ساده و دقیق مطالب مفیدی ارائه میکنی، سپاسگذارم.

  • عادل می‌گه:

    سلام، خیلی مردی. دستت درد نکنه به خاطر این سایت خوبت. من که دو سه صفحه خوندم حال کردم. از اونجایی که دیگه من وقت ندارم برای طراحی سایت مورد نظرم مطلب جدید یاد بگیرم و اصلا مگه این مطالب تموم شدنی هستند یه نامه برات فرستادم امیدوارم جواب بدی حتی اگه جوابت منفی هست. راستی من به کمک فرانت پیج و تغییر کد سایتهایی که به من ایده میده :-) یه کم html و css یاد گرفتم اما فقط در حد طراحی سایت ایستا برای یه استفاده شخصی و یا یه شرکت خیلی کوچولو در حد اطلاع رسانی روابط عمومی جواب میده. اونی که من میخوام طراحی کنم باید بیام مشهد یه ده سال شاگردی شما رو کنم.

  • حسین می‌گه:

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

  • حسین می‌گه:

    تشکر آقا محسن دستت در نکنه

  • حسین می‌گه:

    میشه یکم بیشتر توضیح بدین من اومدم یکی از سطر های جدول رو داخل فرم قرار دادم تا اطلاعات به صورت پست ارسال بشه اما همه با هم ارسال میشن همه سطر های جدول اگه میشه یکم بیشتر راهنمایی کنین.

  • حسین می‌گه:

    سلام من یه مشکلی دارم اگه حل کنید ممنوم میشم من داده های بانک اطلاعاتی رو دریافت میکنم و اونارو داخل جدول میچینم حالا میخوام دکمه ای قرار بدم که وقتی روش کلیک میشه داده ها در یک صفحه دیگر با جزییات کامل نمایش داده بشه اگه کدش رو برام قرار بدین ممنوم میشم hossein.func@gmail.com


  • نظرات این مطلب بسته است.