ftp
3 سال پیش توسط ftp مطرح شد
18 پاسخ

سوال در مورد ایجکس

@mohaligateway
@muhammad
@Rp76
@hesammousavi
@juza66
من ۲ تا select دارم میخوام با انتخاب کردن یکی از اعضای select اولی به صورت ایجکسی رکوردهایی که متناسب با اون عنصر هست در select دومی نمایش داده بشه ؟
مثلا با انتخاب استان لیست شهر های اون استان رو نمایش بده


ثبت پرسش جدید
سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش آپدیت شد
0

گفتم اگر بتونی این اطلاعات رو توی همون بک اند بصورت تگ های HTML برگردونی خیلی کارت راحته!
ولی همین داده ها رو که گرفتی اون شماره ها میشن KEY و داده هات میشه VALUE پس باید اینجوری توی Jq بگیری و APPEND کنی

$.each(result, function(key, value) {
    $("#category_id").append('<option>' + value + '</option>');
});

یعنی کدها یه همچین چیزی میشه

$(document).ready(function () {
    $("#servic_id").click(function(){
        var selectone=$("#servic_id").val();
        $.ajax({
            type:'get',
            url:"<?=url('/admin/product/ajax');?>",
            data:"id="+selectone,
            success:function(result){
                console.log(result);
                $.each(result, function(key, value) {
                    $("#category_id").append('<option>' + value + '</option>');
                });
            }
        });

    });

});

سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش آپدیت شد
3

سناریو رو فکر کنم بدونی ، فقط نحوه کدزدنی با جیکوری رو فکر کنم منظورته

<select onchange="getCity(this);">
    <option value="1">khouzestan</option>
    <option value="2">tehran</option>
</select>

<select id="SelectCity">

</select>

function getCity(state)
{
    var $state = state.value;
    $.ajax({
    url: "https://test.com/city/".$state,
    type: 'GET',
        success: function(res) {

            $("#SelectCity").append(res);

        }
    });
}

چهار خط اول سلکت باکس استان های شماست که با رویداد onchange اطلاعات رو به متد getCity میفرسته برای درخواست ایجکس که شهرها رو بگیره و append کنه به سلکت باکس شهرها
خط 6 تا 8 هم یک سلکت باکس برای نمایش شهرها هستش
خط 10 تا اخر هم همون متد شماس که قرار یک درخواست ایجکس بزنه سمت اون route شما و شهرها رو بگیره و append کنه

توی بک اند هم شما باید اطلاعات شهر رو براساس آیدی یا اسم که میفرستی کوئری بزنی و بصورت html برگردونی

$("#SelectCity").append('<select>\
<option value="shoush">shoush</option>
<option value="dezful">dezful</option>
</select>');

ftp
تخصص : ساده
@ftp 3 سال پیش آپدیت شد
0

@juza66
به این شکل نوشتم اما ارور داره

<select onchange="getCity(this)" name="servic_id" id="servic_id" class="form-control">
                                <option value="">...</option>
                             @foreach($parents as $parent)
                                <option value="{{ $parent->id}}">{{$parent->name }}</option>
                             @endforeach

                            </select>
<select name="category_id" id="category_id" class="form-control">
                                <option value="">...</option>

                            </select>
<script>
function getCity(state)
{
    var $state = state.value;
    $.ajax({
        url: <?=url("/ajax");?>.$state,
        type: 'GET',
        success: function(res) {

            $("#category_id").append(res);

        }
    });
}</script>

توضیح تصویر رو وارد کنید
توضیح تصویر رو وارد کنید


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش آپدیت شد
0

سلام وقتتون بخیر!

پشنهاد من ایکه که همه استان هارو بارگذاری کنید.
همه شهر ها رو هم بارگذاری کنید و با دستور زیر همه رو مخفی کنید.

$("#city").find("option").hide();

باید هر option شهر به این صورت باشه

<option data-state="{{$state->id}}"></option>

حالا میتونید این کار رو کنید

$("#state").change(function(){
    const id=$(this).val();
    $("#city").find("option").hide();
    $("#city").find("option").each(function(index,item){
        if($(item).data("state")==id)
                $(item).show()
    })
})

ftp
تخصص : ساده
@ftp 3 سال پیش مطرح شد
0

@juza66 @Rp76
لود صفحه طولانی میشه


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

جنگه مگه؟
نهایتا ۳۳ تا استان باشه با ۵۰۰ تا شهر دیگه


moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش آپدیت شد
0

سلام
ساختار datatabse شهر ها و استان به چه صورتی هستش ؟ و livewire بلد هستید ؟
@ftp


ftp
تخصص : ساده
@ftp 3 سال پیش آپدیت شد
0

@juza66 @mohaligateway
الان من مقادیر رو بدست آوردم
با این کد

$(document).ready(function () {
    $("#servic_id").click(function(){
        var selectone=$("#servic_id").val();
        $.ajax({
            type:'get',
            url:"<?=url('/admin/product/ajax');?>",
            data:"id="+selectone,
            success:function(result){
                console.log(result);
            $("#category_id").append(result);
            }
        });

    });

});

حالا چطوری روی این select متغییر result رو اجرا کنم

<select name="category_id" id="category_id" class="form-control">
                            <option value="">...</option>
                        </select>

سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش مطرح شد
0

result دریافتی رو بذار ببینم چی داری


ftp
تخصص : ساده
@ftp 3 سال پیش آپدیت شد
سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش آپدیت شد
0

گفتم اگر بتونی این اطلاعات رو توی همون بک اند بصورت تگ های HTML برگردونی خیلی کارت راحته!
ولی همین داده ها رو که گرفتی اون شماره ها میشن KEY و داده هات میشه VALUE پس باید اینجوری توی Jq بگیری و APPEND کنی

$.each(result, function(key, value) {
    $("#category_id").append('<option>' + value + '</option>');
});

یعنی کدها یه همچین چیزی میشه

$(document).ready(function () {
    $("#servic_id").click(function(){
        var selectone=$("#servic_id").val();
        $.ajax({
            type:'get',
            url:"<?=url('/admin/product/ajax');?>",
            data:"id="+selectone,
            success:function(result){
                console.log(result);
                $.each(result, function(key, value) {
                    $("#category_id").append('<option>' + value + '</option>');
                });
            }
        });

    });

});

سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش مطرح شد
0

توی همون فورایچ jq میتونی key رو بعنوان value بذاری که بتونی توی بک اند روش کار کنی یا سیوش کنی


ftp
تخصص : ساده
@ftp 3 سال پیش مطرح شد
0

@juza66
کد بالا رو میزنم اوکی هست اما یک مشکلی که داره این که وقتی دوباره یک گزینه دیگه رو انتخاب میکنم اطلاعات اون به قبلی اضافه میشه.؟
و اینکه راه نداره خودم مقدار result رو به صورت foreach در لاراول استفاده کنم؟


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش آپدیت شد
0

یکار میتونی انجام بدی قبل از Append کردن اول تمام اطلاعات رو پاک کنی.

$("#category_id").find('option').remove()

or

$('#category_id').empty()

اینکه راه نداره خودم مقدار result رو به صورت foreach در لاراول استفاده کنم؟

خب عزیز دارم اشاره میکنم قبل از اینکه اطلاعات از سمت بک اند برای فرانت بفرستی خودت فورایچ رو بزن بعدش اطلاعات html برگردون و استفاده کن، اگر نمیدونی لطفا کدهای backend مربوط به همین result بذار تا راهنمایی کنیم


ftp
تخصص : ساده
@ftp 3 سال پیش آپدیت شد
0

@juza66

public function ajax()
{
    $category=Category::find($_GET['id']);
    return $categories = $category->getCategoriesIdsByName();
}

ftp
تخصص : ساده
@ftp 3 سال پیش مطرح شد
0

@juza66
مهندس ببخشید الان به یک چالشی خوردم الان وقتی میخوام فیلدها رو ادیت کنم در لاراول دستورold() مقادیر انتخاب شده نمایش داده میشن الان با این کد ایجکس چطوزی میتونم بگم که مقدارش اگه بود نمایش بده؟

{{old('price',$product->price ?? '')}}

Hatef Hatefi
تخصص : برنامه نویس .net
@hatefm69 3 سال پیش مطرح شد
0

@juza66
میشه این حرفی رو که زدید (
گفتم اگر بتونی این اطلاعات رو توی همون بک اند بصورت تگ های HTML برگردونی) ان رو نشون بدید من متوجه نشدم به چه شکلی میشه


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش آپدیت شد
0

@hatefm69
این روش مرسوم نیست ولی باز توی دیتاهای کم بد نیست و کار رو راه میندازه (اگر اطلاعات زیادی میخوای لود کنید و محدودیت نذاشتین و از lazy load استفاده نکنیم بعدا ممکنه رم سرور و بعضا رم کاربر رو توسط مرورگر درگیر کنی )

میشه اینجوری

$users = User::where('fullname','LIKE','%'.$request->fullname.'%')->get();
$output='';
foreach($users as $user){

    $output .= '<li>'.$user->fullname.'<li>'

}

return response()->json(['result'=>$output , 'count'=>$users->count()]);

سمت فرانت هم result رو میگیری و append میکنی به جایی که میخوایی


ftp
تخصص : ساده
@ftp 3 سال پیش مطرح شد
0

@juza66
@hatefm69
@websaz
حالا یک نکته ای من میخوام بگم که اگه #servic_id خالی بود بیا یک متدد دیگه ای رو اجرا کن میشه راهنمایی کنید


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام