رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
انتخاب مدل Ajax
#1
سلام دوستان. توی یک صفحه که با php ساخته شده فرض کنید 100 فرمول وجود داره، که کاربر یک کدوم رو انتخاب میکنه، و کنارش پارامترهای اون فرمول(A,B,C,D و ... ) رو عددش رو وارد میکنه و با زدن دکمه "محاسبه" این عددها به صورت Ajax میرن به سرور، و جواب با استفاده از فرمول یکتا از بین 100 فرمول موجود(فرمول همونی که انتخاب کرده بود و عددهاش رو پر کرده بود) محاسبه میشه و response به صورت Ajax برمگیرده و نشون داده میشه.

مشکل من اینه که هر فرمول پارامترهای خودش رو داره، یعنی یکی A*B*C/12 هستش، و کاربر باید داده های A,B,C رو فقط وارد کنه و جواب با Ajax براش نشون داده میشه، ولی فرمول دیگه پارامترهاش فرق داره، یا مثلا ممکنه 4 پارامتر باشه، مثلا A*B*C*D/48
ولی من نمیخوام واسه هر کدوم از اینا یک Ajax جدا درست کنم چون همونطور که گفتم 100 تا فرموله! فقط میخوام یک صفحه php مقصد واسه درخواست های Ajax بسازم و اونجا بسته به انتخابی که کاربر کرده بود از بین اون 100 تا، فرمولش رو پیدا کنم و جواب رو بهش بدم.

از چه مدل Ajax ای باید استفاده کنم؟! ممنون میشم اگه نمونه کدی بتونید قرار بدید
پاسخ
تشکر شده توسط:
#2
UP...
پاسخ
تشکر شده توسط:
#3
سلام ...
نمیدونم برای انتخاب فرمول ، توسط کلاینت ، از چه المنتی استفاده میکنید .

اما تصور میکنیم از یه radio input استفاده کردید.

به این شکل:

کد:
<label> فرمول 1 <input class="choises" data-count="3" type="radio" value="for1" name="formula" /></label>
<label> فرمول 2 <input class="choises" data-count="4" type="radio" value="for2" name="formula" /></label>
<label> فرمول 3 <input class="choises" data-count="6" type="radio" value="for3" name="formula" /></label>

<label class="input"> داده a <input type="text" id="a" /></label>
<label class="input"> داده b <input type="text" id="b" /></label>
<label class="input"> داده c <input type="text" id="c" /></label>
<label class="input"> داده d <input type="text" id="d" /></label>
<label class="input"> داده e <input type="text" id="e" /></label>
<label class="input"> داده f <input type="text" id="f" /></label>

صفت data-count تعداد داده مورد نیاز برای فرمول رو نشون میده

یک کد جیکوئری هم اضافه کنید به این شکل که کمک میکنه تعداد ورودی های کاربر رو مشخص کنه:

کد:
<script>
$(document).ready(function(){
    $('label.input').hide();
    $('.choises').change(function(){
        var a = $(this).data('count') - 1;
        $('.input').show();
        $('.input:gt(' + a + ')').hide();
    });
});
</script>



حالا توی داده های ایجکس همه input های کاربر رو با این شرط که اگر visible باشن ارسال کنید

مابقی رو هم توی صفحه php بررسی کنید


اینم دمو بدون ایجکس
پاسخ
تشکر شده توسط: php
#4
مرسی، راهنمایی خوب و جالبی بود، ولی توی این روش شما، فیلدها واسه همه 100 فرمول مشترکه، ولی من فیلدها رو توی هر ردیف جداگانه الان درست کردم، مثلا ردیف اول که فرمول اوله 3 تا فیلد داره و اگر دکمه "محاسبه کنار همین ردیف اول رو بزنه 3تا داده میرن واسه ajax
و توی ردیف بعدی هم 4 تا فیلد جداگانه خودش رو داره با یک دکمه "محاسبه" دیگه

مورد بعدی اینکه شما به صفحه Php مقصد ajax اشاره ای نکردید. من راه حلی که خودم به ذهنم میرسه اینه که یک دکمه "محاسبه" بسازم(در واقع 100 تا، به تعداد ردیف ها) ولی به جای اینکه 100 تا تا کد جاوا اسکریتپت بنویسم یک جوری کد رو بنویسم( که همینو نمیدونم و سوالمه) که بفهمه روی کدوم دکمه "محاسبه" کلیک شده، مثلا اگر روی اولی کلیک شده باید 3تا فیلد رو بفرسته به ajax و اگر روی "محاسبه" ردیف دوم کلیک شده بود 4 تا فیلد اون ردیف رو به ajax بفرسته، همچین یک id هم از شماره ردیف مثلا از 1 تا 100 رو در کنار پارامترهای ajax به Php مقصد بفرسته که با این شماره در سمت سرور بفهمم از کدوم فرمول از اون 100 تا استفاده کنم و با انتخاب فرمول مربوطه مثلا از یک آرایه 100 تایی، جواب رو محاسبه کنم.
پاسخ
تشکر شده توسط:
#5
نیازی نیست همه چیو جدا جدا بررسی کنید
تنها کاری که میکنید این باشه که فرمول ها رو چک کنید. بعد ببینید بیشترین داده ها مال کدوم فرمول هست

بعد به تعداد همون داده های اون فرمول ، input بسازید

ایجکس رو اینجوری کار کنید:

کد:
$request = '?formula=' + $.trim($('.choises:checked').val());
$('[type="text"]').each(function(){
    if($(this).is(':visible') && $(this).val() && $(this).val().length > 0)
        $request += $(this).attr('id') + '=' + $.trim($(this).val()) + '&';
});
$.ajax({
    type: 'post',
    cache: false,
    url: 'ajax.php' + $request,
    beforeSend: function(){
        
    },
    success: function(result){
alert(result);        
    }
});


توی فایل php هم باید اول پارامتر ها رو مرتب کنید:

foreach($_POST as $key => $value){
$data[$key] = ($value ? htmlentities($value) : NULL);
}

حالا باید یه چیزی مثل switch بنویسید و فرمول ها رو مشخص کنید

این شکلی:


switch($data['formula']){
case 'for1':
echo $data['a'] * $data['b'];
break;
case 'for2':
echo $data['a'] + $data['b'];
break;
case 'for3':
echo $data['a'] / $data['b'];
break;
}
پاسخ
تشکر شده توسط: php




کاربران در حال بازدید این موضوع: 1 مهمان