PDA

View Full Version : سوال: دریافت نتیجه ی یک درخواست با ()jquery.post از یک تابع php



armsoftpc
یک شنبه 28 اسفند 1390, 15:31 عصر
به نام خدا
با سلام
من توی اینترنت و کتاب ها که یه گشتی زدم ، همه درخواست رو به یک فایل php که تعداد خروجی هاش محدود بود (فقط جواب دهنده بود ، یعنی که دیگر از تگ html , body , ... در آن خبری نبود) ، ارسال می کردند و نتیجه را نیز با همان فایل php بر می گردوند و با jquery در صفحه نمایش می دادند.
اما آیا میشه درخواست ها را به یک تابع در php ارسال کرد و جواب را از تابع دریافت کرد ، اگر قرار باشد ، ما برای این که هر فرمی را آژاکسی کنیم یک فایل بسازیم ، دیگر آن cms میشه مثل بازار شام!!!
امیدوارم منظورم رو دوستان متوجه شده باشند، اگر متوجه نشدید بگید بیشتر توضیح بدم.:متفکر:

farhadfery
یک شنبه 28 اسفند 1390, 16:12 عصر
من که نفهمیدم چی میگید:گیج: یا من بد می گیریم یا شما بد می حرفید.
اما برداشت من اینبود که شما یه صفحه دارید که تمام درخواست های ajaxای را به اون ارسال می کنید و شما تصمیم دارید در این صفحه برای هر کار خاصی یه function تعریف کنید. همینه؟

MMSHFE
یک شنبه 28 اسفند 1390, 16:39 عصر
میتونید توابع لازم رو توی یک فایل بگذارین و موقع صدا زدن اون فایل با AJAX، نام تابع رو هم بصورت پارامتر براش بفرستین و اون فایل، برحسب تابع درخواست شده، اون رو اجرا کنه و پارامترها رو براش بفرسته و نهایتاً خروجی رو برگردونه.

farhadfery
یک شنبه 28 اسفند 1390, 16:50 عصر
میتونید توابع لازم رو توی یک فایل بگذارین و موقع صدا زدن اون فایل با AJAX، نام تابع رو هم بصورت پارامتر براش بفرستین و اون فایل، برحسب تابع درخواست شده، اون رو اجرا کنه و پارامترها رو براش بفرسته و نهایتاً خروجی رو برگردونه.
جواب ندادندکه منظورشون چی بود؟
اما با این برداشت مشترکی که داشتیم. همینطور که شما فرمودید. اما به جای نام تابع که تابلوکاری هست یه نام مشابه ارسال کنه. بنابراین در پایانه querystring خود اضافه می کنند: &action =namemonaseb
و بعد در ابتدای صفحه ای که قرار بود تابعها در آن قرار بگیرید. یک سوییچ روی action می گذارید و بر اساس مقدار آن تابع را صدا بزنید.
یا حق.

Reza1607
یک شنبه 28 اسفند 1390, 18:49 عصر
به نظر من منظور ايشون اين بود كه به صورت معمول فايلي كه پردازش ها رو انجام ميده تنها يك فايل هست آيا ميشه چند فايل داشته باشيم؟
اگه منظورتون همينه بله
به دو روش
روش اول اين كه شما تمام درخواست ها رو به يك فايل مي فرستين و اون فايل بعد از بررسي درخواست فايل مربوطه رو صدا مي زنه ( مثل mvc)
روش دوم شما همون موقع كه مي خواين درخواست رو بفرستيد مي تونيد اسم فايل رو هم مشخص كنيد مثلا مي خواين يكسري عكس رو لود كنيد درخواست رو به فايل image.php مي فرستين و يا اينكه مي خواين نظرات يك موضوع رو بگيريد درخواست رو به يك فايل ديگه مثلا به اسم comment.php مي فرستيد

اميدوارم منظورتون رو درصت متوجه شده باشم

armsoftpc
دوشنبه 29 اسفند 1390, 14:03 عصر
به نام خدا
با سلام و تشکر از همه دوستان

میتونید توابع لازم رو توی یک فایل بگذارین و موقع صدا زدن اون فایل با AJAX، نام تابع رو هم بصورت پارامتر براش بفرستین و اون فایل، برحسب تابع درخواست شده، اون رو اجرا کنه و پارامترها رو براش بفرسته و نهایتاً خروجی رو برگردونه.
دقیقا منظور من همینه ، اما ای کاش یه مثال می زدید.

روش دوم شما همون موقع كه مي خواين درخواست رو بفرستيد مي تونيد اسم فايل رو هم مشخص كنيد مثلا مي خواين يكسري عكس رو لود كنيد درخواست رو به فايل image.php مي فرستين و يا اينكه مي خواين نظرات يك موضوع رو بگيريد درخواست رو به يك فايل ديگه مثلا به اسم comment.php مي فرستيد
دوست عزیز من نمی خوام هر درخواست رو برای هر فایل بفرستم ، می خواهم n درخواست را برای یک فایل فرستاده (از هر فایلی، یک فایل فقط پردازشگر(php) است) و جواب هر کدام از درخواست ها را یک تابع بدهد، یعنی هر چند تا بخواهیم در اون فایل تابع بنویسیم که جواب دهنده به هر درخواست ارسال شده باشند.
فکر نکنم ، دیگر به هیچ وجه ابهامی مانده باشد.

Farshid007
دوشنبه 29 اسفند 1390, 19:26 عصر
به این یه نگاه بنداز
(http://www.w3schools.com/php/php_ajax_database.asp)

MMSHFE
دوشنبه 29 اسفند 1390, 20:17 عصر
این یک مثال در ساده ترین حالت هست. کد فایل اصلی:


<!doctype html>
<html>
<head>
<title>Multiple Functions DEMO</title>
<meta charset="utf-8"/>
<script src="jqmin.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#image").click(function() {
$.ajax({
type: "get",
url: "function.php",
data: "action=image&name="+$("#name").val(),
success: function(data) {
$("#container").html(data);
}
});
});
$("#text").click(function() {
$.ajax({
type: "get",
url: "function.php",
data: "action=text&name="+$("#name").val(),
success: function(data) {
$("#container").html(data);
}
});
});
$("#table").click(function() {
$.ajax({
type: "get",
url: "function.php",
data: "action=table&name="+$("#name").val(),
success: function(data) {
$("#container").html(data);
}
});
});
});
</script>
</head>
<body>
Enter Your Name : <input id="name" type="text"/><br/>
<input id="image" type="button" value="Image"/>
<input id="text" type="button" value="Text"/>
<input id="table" type="button" value="Table"/>
<div id="container">&nbsp;</div>
</body>
</html>
کد فایل function.php که درخواستها رو بررسی و جواب رو ارسال میکنه:


<?php
function image($name) {
echo '<img src="images/'.$name.'.jpg"/>';
}
function text($name) {
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
mysql_real_escape_string($name);
$user = mysql_query("SELECT * FROM `users` WHERE (`name`='{$name}')");
if($user) {
echo 'We have '.mysql_num_rows($user).' users with this name.';
}
}
function table($name) {
echo '<table border="1px" width="300px"><tr><th>Hello</th><td>'.$name.'</td></tr></table>';
}

if(isset($_GET['action'], $_GET['name'])) {
call_user_func($_GET['action'], $_GET['name']);
}
?>

موفق باشید.

armsoftpc
سه شنبه 01 فروردین 1391, 13:26 عصر
به نام خدا
با سلام
عالی بود و جواب داد، مثل همیشه!:قلب:
اما چند تا سوال در این رابطه داشتم:


اگر مقدار $_GET['name'] یا هر متغیر ارسالی دیگر خالی داده شود ، آیا php همانند متغیر های فرم و لینکی (با استفاده از تگ a) ارور خالی بودن متغیر را میدهد و ما مجبوریم برای نمایش ندادن این ارور برای کاربر از @ استفاده کنیم؟
در صورت استفاده از کد بالا برای ارسال داده ها ، آیا باز هم محدودیت 255 کاراکتری را برای ارسال داریم مثل فرم ها و لینک ها، من که هنگام ارسال هیچ چیزی در نوار آدرس مرورگر نمی بینیم ، فکر کنم محدودیت کاراکتری نداشته باشد و مثل post باشد، اگر این گونه نیست ، چگونه داده ها را پست گونه (نوع post) ارسال کنیم.
اگر امکان دارد ، در مورد dataType در ajax.$ یک توضیح بدهید (مخصوصا کار با نوع json و نحوه ی ارتباط با php) و اگر این مقدار ، نوع دهی نشود از چه نوع پیش فرضی استفاده می شود .
اگر بخواهیم نوع داده ها را json بفرستیم و این گونه دریافت کنیم ، کد php , js آن چگونه خواهد بود.

در ضمن من یه یک هفته ای نمی تونم به سایت سر بزنم ، چون به مشهد می روم و تنها سوغاتی که می تونم برای دوستان و شما بیارم دعا برای پیشرفت و موفقیتتان در آن جا (یکم حرفام پارادوکس داشت) است.:تشویق:
موفق باشید ، عید شما و همه دوستان مبارک!!:لبخند::بوس:

MMSHFE
سه شنبه 01 فروردین 1391, 13:42 عصر
1- باید توی اسکریپت مقصد AJAX خودتون چک کنید. البته میتونید سمت کلاینت هم با jQuery چک کنید و اگه کادر name خالی بود، خطا نشون بدین و اسکریپت سمت سرور رو درخواست نکنید.
2- بله با روش GET محدودیت 255 کارکتری رو داریم. برای روش POST کافیه type رو توی تابع ajax.$ به post تغییر بدین و توی صفحه مقصد هم بجای GET_$ از POST_$ استفاده کنید.
3- dataType میتونه یکی از مقادیر xml و html و json و jsonp (مثل json منتها میشه اسکریپتهای راه دور هم براش نوشت) و script (قبل از ارسال به توابع نهایی، خروجی بعنوان یک کد JS پردازش میشه) و text باشه (پیشفرض text هست).
4- برای خروجیهای json باید توسط PHP خروجی رو در قالب مناسب تولید کنید (با ساختار JSON) و اینطرف بطور خودکار شئ مربوطه پردازش میشه و متغیرهای موردنظر بصورت یک آرایه ساخته خواهند شد.
موفق باشید.

armsoftpc
سه شنبه 01 فروردین 1391, 13:49 عصر
به نام خدا
با سلامی دوباره

2- بله با روش GET محدودیت 255 کارکتری رو داریم. برای روش POST کافیه type رو توی تابع ajax.$ به post تغییر بدین و توی صفحه مقصد هم بجای GET_$ از POST_$ استفاده کنید.
اگر این کار را انجام دهم ، آن وقت باید قسمت
data: "action=text&name="+$("#name").val(), را نیز برای تابع call_user_func به صورت $_post بگیرم ، من که گیج شدم.

MMSHFE
سه شنبه 01 فروردین 1391, 14:15 عصر
نه این قسمت فرقی نمیکنه. مزیت jQuery همینه که شما دیتا رو معمولی میفرستین و خودش عمل urlencodeکردن فرمهای POST رو انجام میده. درواقع همین data اونطرف بصورت post ارسال خواهد شد و توسط آرایه POST_$ قابل دسترسی خواهد بود. موفق باشید.