ورود

View Full Version : سوال: تکراری لود شدن باکس ها در partial view



piter11
پنج شنبه 04 مرداد 1397, 11:50 صبح
سلام در قطعه کد های زیر من دستور هر بار لود شدن اطلاعات از دیتایس رو گذاشتم مشکل من اینه نمیدونم چرا بعضی وقتا تابع GetData () چند بار فراخوانی میشه و اجرا میشه ! و مثلا میبینی برای متغیر pageindex چند بار مقدار 1 ثبت میشه و اجرا میشه و نتیجش میشه ظاهر شدن چند باکس تکراری ! کسی میتونه مشکلش رو پیدا کنه :متفکر:


قسمت کنترلر :

public ActionResult GetData(int pageIndex)
{


var query = (from a in db.Tbl_UrlUser
where a.Status != null
orderby a.Id descending
select a);
//5 تا 5تا نمایش میدهد باکس
int take = 5;
int Skip = (pageIndex * take) - take;

return PartialView("ProductPartial", query.Skip(Skip).Take(take));

}




قسمت پارشیال ویو: ProductPartial

@foreach (var item in Model)
{

<div class="col-lg-3">
@if (item.pic == null)
{



<a id="thumb" target="_blank" href="~/home/iframe?url=@item.Url"> <img src="~/home/Saveimage?url=@item.Url" width="180" height="180" alt="@item.Url" class="img-responsive img-rounded" targe="blank" ata-toggle="tooltip" data-placement="top" title="@content" /> </a>
<br />

}

else
{

<a id="thumb" target="_blank" href="~/home/iframe?url=@item.Url"> <img src="~/images/@item.pic" width="180" height="180" alt="@item.Url" class="img-responsive img-rounded" targe="blank" data-toggle="tooltip" data-placement="top" title="@content" /> </a>
<br />

}

</div>

}



قسمت ویو (اصلی) کد جاوا اسکریپت (از اینجا صدا زده میشه تابع GetData():

<script type="text/javascript">


var pageIndex = 1;
var size = 1650;

$(document).ready(function () {


//بار اول صدا زده میشود و 5 باکس نمایش میدهد
GetData();



$(window).scroll(function () {
if ($(this).height() <= 768) {
if ($(this).scrollTop() >size) {
// بر اساس سایز اسکرول صفحه سایت دوباره صدا زده میشود تابع زیر
GetData();

size = size + 100;
}

}
});

});


function GetData() {
$.ajax({
type: 'GET',
url: '/home/GetData',
data: { "pageindex": pageIndex },
//dataType: 'json', //Because the GetData now return the partialview content instead if json result

success: function (data) {

if (data != null) {

// اجرا شدن و نمایش باکس ها در ای دی زیر
$("#container").append(data);
//یک واحد اضافه میشود بعد از هر نمایش
pageIndex++;

}

},

beforeSend: function () {

$("#loading").delay(0).fadeIn(9000);
},
complete: function () {


$("#loading").delay(0).hide
(2000);


},


error: function () {
//alert("Error while retrieving data!");
}
});
}
</script>

piter11
پنج شنبه 04 مرداد 1397, 11:57 صبح
همینطور که میبینید بعضی از باکس ها تکراری هستن

148602

piter11
پنج شنبه 25 مرداد 1397, 21:40 عصر
کسی اصلا این کارو انجام داده؟ من میخوام مثل سایت دیوار موس میارم آحر محصولات بعدی لود شن

Mahmoud.Afrad
جمعه 26 مرداد 1397, 19:17 عصر
شرط اسکرول رو اصلاح کنید.
https://stackoverflow.com/a/3898152
https://stackoverflow.com/a/9439807

یک متغیر با مقدار false ایجاد کنید.
قبل از ارسال درخواست ، چک کنید اگر متغیر false بود مقدار رو به true تغییر بدید و درخواست ارسال بشه. اگر مقدار true بود یعنی هنوز درخواست قبلی تمام نشده. بعد از پایان درخواست متغیر را false کنید.

piter11
دوشنبه 19 شهریور 1397, 13:09 عصر
الان من طبق گفته شما متغیری با مقدار false تعربف کردم ولی اونجایی که نوشتید باید مقدار رو به true تبدیل کنید دقیقا نمیدونم کجا باید این کارو بکونم از 9تا محصول 6تاشو میاره بعدش به قولی شما تو true گیر میکنه


var gog=false;

$(window).scroll(function () {
if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.7){




if (gog==false){

gog=true;
GetData();

}

}
});

});

piter11
سه شنبه 20 شهریور 1397, 10:34 صبح
یکی جواب بده بدجور کارم گیر
مشکل اینه هربار اسکرول بالا پایین میکنم انگار رو دکمه هر بار کلیک میکنیم اینم میاد هی تابع getdata() اجرا می کنه و تکراری میده بیرون
جالب وقتی در ابتدای تابع getdata() از دستور alert() استفاده میکنم همه مشکلات حل میشه ! وقفه با مسیج باکس ایجاد میشه درست میشه ولی خب من نمیخوام اون alert نمایش داده بشه

Mahmoud.Afrad
سه شنبه 20 شهریور 1397, 21:06 عصر
function GetData() {
if (gog == true)
return;

$.ajax({
type: 'GET',
url: '/home/GetData',
data: { "pageindex": pageIndex },
//dataType: 'json', //Because the GetData now return the partialview content instead if json result

success: function (data) {
if (data != null) {
// اجرا شدن و نمایش باکس ها در ای دی زیر
$("#container").append(data);
//یک واحد اضافه میشود بعد از هر نمایش
pageIndex++;
}
},
beforeSend: function () {
gog = true;
$("#loading").delay(0).fadeIn(9000);
},
complete: function () {
$("#loading").delay(0).hide
(2000);
},
error: function () {
//alert("Error while retrieving data!");
},
always(function() {
gog = false;
}
});

piter11
سه شنبه 20 شهریور 1397, 22:56 عصر
خیلی ممنون درست شد و کار میکنه صحیح:قلب: این سایت خیلی شبیه دیوار هستش برای مشتری طراحی کردم
148851