Tinklalapio paieška programoje REST

Tai yra bendresnis šios problemos formulavimas (pašalinus konkrečias bėgių dalis)

Nesu tikras, kaip įgyvendinti puslapių leidimo resursą atnaujinamoje žiniatinklio programoje. Darant prielaidą, kad turiu išteklių, vadinamų products , kuris iš šių manymu yra geriausias būdas ir kodėl:

1. Naudokite tik užklausų eilutes

Pavyzdžiui. http://application/products?page=2>
Problema yra ta, kad negaliu naudoti viso puslapio talpyklos, o URL nėra labai švarus ir lengva prisiminti.

2. Naudojant puslapius kaip išteklius ir užklausų eilutes rūšiavimui

Pavyzdžiui. http://application/products/page/2?sort_by=date>
Šiuo atveju matoma problema yra ta, kad „ http://application/products/pages/1 nėra unikalus šaltinis, nes naudojant sort_by=price gali būti gautas visiškai kitoks rezultatas, ir aš vis dar negaliu naudoti puslapio talpyklos.

3. Naudodami puslapius kaip išteklių ir URL segmentą rūšiuoti

Pavyzdžiui. http://application/products/by-date/page/2
Asmeniškai nematau jokių problemų, susijusių su šio metodo naudojimu, bet kažkas mane įspėjo, kad tai nėra labai geras būdas (tai nepateikė priežasties, todėl, jei žinote, kodėl tai nerekomenduojama, praneškite man)

Visi pasiūlymai, nuomonės, kritika yra daugiau nei laukiami. Ačiū.

311
22 апр. rinkinys andi Bal 22 2009-04-22 12:53 '09, 12:53, 2009-04-22 12:53
@ 13 atsakymų

Manau, kad problema, susijusi su 3 versija, yra „problemos“ problema - puslapyje matote puslapį kaip šaltinį ar produktą.

Jei matote puslapį kaip šaltinį, tai yra visiškai puikus sprendimas, nes užklausa 2 puslapyje visada rodys 2 puslapį.

Tačiau, jei puslapyje matote produktus kaip šaltinį, turite problemų dėl to, kad 2 puslapyje esantys produktai gali keistis (seni produktai yra ištrinti arba kažkas kita), tokiu atveju URI ne visada grąžina tuos pačius išteklius.

Pavyzdžiui. Klientas išsaugo nuorodą į produkto sąrašą X, kitą kartą, kai nuoroda atsidaro, produktas nebegali būti X puslapyje.

59
22 апр. Atsakymą pateikė Fionn balandžio 22 d 2009-04-22 13:15 '09, 13:15, 2009-04-22 13:15

Sutinku su Fionn, bet dar vieną žingsnį ir pasakyti, kad man šis puslapis nėra , tai yra prašymo nuosavybė. Tai leidžia man pasirinkti tik 1 užklausos eilutę. Tai tiesiog jaučiasi gerai. Man labai patinka, kaip „ Twitter“ API yra tvarkinga. Ne per daug paprasta, ne per daug sudėtinga, gerai dokumentuota. Geriau ar blogiau, tai yra mano „vaikščiojimas“, kai esu ant tvoros, darau kažką vienašališkai prieš kitą.

102
22 апр. atsakymas pateikiamas 22 d. 2009-04-22 14:14 '09, 14:14, 2009-04-22 14:14

HTTP turi didelį diapazono antraštę, kuri taip pat tinka puslapių numeravimui. Ar galite siųsti

 Range: pages=1 

turėti tik pirmąjį puslapį. Tai gali priversti jus permąstyti, kas yra puslapis. Galbūt klientas nori kitokio produktų asortimento. Antraštės diapazonas taip pat leidžia paskelbti užsakymą:

 Range: products-by-date=2009_03_27- 

gauti visus produktus vėliau nei ši data, arba

 Range: products-by-date=0-2009_11_30 

gauti visus senesnius produktus. „0“ tikriausiai nėra geriausias sprendimas, tačiau atrodo, kad RFC nori ką nors pradėti. Gali būti dislokuoti HTTP parsersai, kurie neskaitys vienetų = -range_end.

Jei antraštės nėra (priimtinos) parametrai, manau, kad pirmasis sprendimas (viskas užklausų eilutėje) yra būdas tvarkyti puslapius. Bet prašome normalizuoti užklausos eilutes (rūšiuoti (raktas = vertė) abėcėlės tvarka). Tai išsprendžia problemą "? = 1 b = x" ir "? B = x a = 1".

35
04 дек. atsakymas duotas temoto 04 Dec. 2009-12-04 22:55 '09 10:55 val. 2009-12-04 22:55

1 variantas, atrodo, yra geriausias, kiek tai yra jūsų programų peržiūros puslapiuose, kaip kito to paties šaltinio rodinio kūrimo būdas.

Tai pasakius, URL schema yra palyginti nedidelė. Jei kuriate savo programą kaip hipertekstą (kadangi visos REST programos turi būti apibrėžtos), jūsų klientas nesukurs jokių URI. Vietoj to, jūsų paraiška suteiks nuorodas į klientą, o klientas jas stebės.

Vienas iš saitų, kuriuos gali pateikti klientas, yra nuoroda į puslapius.

Gražus šalutinis poveikis yra tas, kad net jei pakeisite savo nuomonę apie puslapio ieškos struktūrą ir kitą savaitę padarysite visiškai kitokį skirtumą, jūsų klientai gali toliau dirbti be jokių pakeitimų.

24
26 июля '09 в 20:54 2009-07-26 20:54 atsakymą pateikė „ Rich Apodaca “ liepos 26 d., 09:54, 2009-07-26 20:54

Visada naudoju 1 pasirinkimo stilių. „Caching“ nebuvo problema, nes duomenys dažnai keičiasi. Jei leisite, kad puslapio dydis būtų pritaikytas, duomenys negali būti saugomi.

Neturiu, kad URL būtų sunku prisiminti arba nešvarus. Man tai yra tikslus užklausų parametrų naudojimas. Ištekliai yra aiškiai produktų sąrašas, o užklausos parametrai paprasčiausiai sako, kaip norite, kad sąrašas būtų rodomas - surūšiuotas ir koks puslapis.

11
04 мая '09 в 20:09 2009-05-04 20:09 Atsakymą pateikė John Snyders gegužės 04 d. 09:09 2009-05-04 20:09

Keista, kad niekas nenurodė, kad 3 variante yra tam tikros tvarkos parametrai. HTTP // taikymas / Produktai / Data / mažėjantis / Pavadinimas / Didėjantis / puslapis / 2, taip pat HTTP // programos / produktai / Pavadinimas / didėjančios / Data / descending / page / 2

nukreipkite į tą patį šaltinį, tačiau turi visiškai skirtingus URL.

Man atrodo, kad 1 variantas yra priimtiniausias, nes jis aiškiai atskiria „ko aš noriu“ ir „kaip aš noriu“ (jis netgi turi klausimų ženklą tarp jų). Visą puslapio talpyklą galima įdiegti naudojant visą URL (visos parinktys turės tą pačią problemą).

Naudojant parametrų parametrus URL parametre, vienintelis privalumas yra švarus URL. Nors jums reikia sugalvoti tam tikrą būdą koduoti parametrus ir dekoduoti juos be nuostolių. Žinoma, galite eiti su URLencode / dekoduoti, bet tai darys URL negraži :)

8
17 марта '10 в 2:26 2010-03-17 02:26 Atsakymas, suteiktas TEHEK, kovo 17 d., 10 val

Norėčiau naudoti kompensavimo ir apribojimo užklausos parametrus.

kompensuoti : rinkinio elemento indeksui.

riba : elementų skaičius.

Klientas gali tiesiog atnaujinti kompensaciją taip.

 offset = offset + limit 

kitą puslapį.

Kelias laikomas išteklių identifikatoriumi. Ir puslapis nėra šaltinis, o išteklių rinkimo pogrupis. Kadangi puslapių leidimas paprastai yra GET užklausa, užklausos parametrai geriausiai tinka lapavimui, o ne antraštėms.

Aš naudoju metamug . Jie turi šią konfigūraciją. Metaduomenų skaidymas su pasirinkta užklausa

6
23 июля '15 в 12:05 2015-07-23 12:05 Atsakymą pateikė „ Sorter “ liepos 23 d., 15 val. 12:05 2015-07-23 12:05

Šiuo metu aš naudoju tokią schemą savo ASP.NET MVC programose:

Pavyzdžiui. http://application/products/by-date/page/2

visų pirma: http://application/products/Date/Ascending/3

Tačiau aš nesu labai patenkintas tuo, kad tokiu būdu įtraukta informacija apie paiešką ir rūšiavimą maršrutu.

Pakeistas elementų sąrašas (šiuo atveju produktai). ty kitą kartą, kai kas nors grįš į URL, kuriame yra ieškos ir rūšiavimo parinktys, rezultatai gali pasikeisti. Taigi, prarandama „ http://application/products/Date/Ascending/3 idėja kaip unikalus URL, nukreipiantis į konkretų, nepakitusį produktų rinkinį.

4
22 апр. Atsakė Steve Willcock balandžio 22 d 2009-04-22 13:16 '09 13:16 PM 2009-04-22 13:16

Ieškodami geriausios praktikos, aš lankiausi šioje svetainėje:

http://www.restapitutorial.com

Ištekliaus puslapyje yra nuoroda, leidžianti atsisiųsti .pdf, kurioje yra visos autoriaus pasiūlytos REST rekomendacijos. Kuriuose, be kitų dalykų, yra skiltis apie puslapius.

Autorius siūlo pridėti paramą naudodamas „Range“ antraštę ir užklausos eilutės parametrus.

Prašymas

HTTP antraštės pavyzdys:

 Range: items=0-24 

Užklausos eilutės parametrų pavyzdys:

 GET http://api.example.com/resources?offset=0> 

Jei nuokrypis yra pradinės padėties numeris ir riba yra didžiausias grąžintų elementų skaičius.

atsakymas

Atsakyme turėtų būti turinio diapazono antraštė, nurodanti, kiek elementų grąžinama ir kiek elementų dar nerasta.

HTTP antraštių pavyzdžiai:

 Content-Range: items 0-24/66 Content-Range: items 40-65/* 

.Pdf faile yra keletas kitų pasiūlymų konkrečiais atvejais.

3
08 марта '16 в 19:54 2016-03-08 19:54 atsakymą pateikė Mario Arturo kovo 8 d. 16, 19:54 2016-03-08 19:54

Aš linkiu sutikti su tuo, kad „puslapis“ nėra iš tikrųjų išteklių. Kita vertus, 3 variantas yra švaresnis, lengviau skaitomas, ir jį gali lengviau atspėti vartotojas ir, jei reikia, net išspausdinti. Aš esu suplėšytas tarp 1 ir 3 variantų, bet nematau priežasties nenaudoti 3 galimybės.

Be to, nors jie atrodo gražiai, vienas iš paslėptų parametrų naudojimo trūkumų, kaip minėta aukščiau, o ne užklausų eilutės ar URL segmentai, yra tai, kad vartotojas negali pridėti žymių arba tiesiogiai susieti su konkrečiu puslapiu. Tai gali arba negali būti problema, priklausomai nuo programos, bet tik kažkas, apie kurią reikia žinoti.

1
22 апр. Atsakymas pateikiamas insane.dreamer balandžio 22 d 2009-04-22 17:05 '09, 17:05 val. 2009-04-22 17:05

Mano projektuose naudoju šiuos URL:

 http://application/products?page=2> 

tai reiškia - „duok man puslapio antrojo puslapio, užsakyto pagal lauką, ir tada eikite žemyn pagal lauką 2“. Arba, jei man reikia daugiau lankstumo, naudoju:

 http://application/products?skip=20> 
0
14 июля '14 в 2:59 2014-07-14 02:59 atsakymą pateikė Eugenijus liepos 14 d. 14:59 2014-07-14 02:59

Prieš tai naudoju 3 sprendimą (rašau daug django programų). Ir nemanau, kad tai yra kažkas negerai. Tai lygiai taip pat, kaip ir kiti du (jei reikia atlikti tam tikrus grandiklius ar pan.), Ir atrodo švaresnis. Be to, naudotojai gali atspėti URL (jei tai vieša programa), o žmonės mėgsta eiti tiesiai į norimą vietą, o URL-guessing jaučiasi įgalioti.

0
22 апр. Atsakymą pateikė Alex balandžio 22 d 2009-04-22 14:41 '09, 14:41 val. 2009-04-22 14:41
 <div style="text-align: right; float: left;"> <table> <tr> <td> <span onclick="GoFirstPage()" title="First page"> <img width="25" alt="Go to first" src="../../Icon/first.png" /> </span> </td> <td><span onclick="GoPrevPage();" title="Previous"> <img width="25" alt="Previous" src="../../Icon/prev.png" /> </span></td> <td><span> <input style="width: 30px; border: none; text-align: right; background: white" readonly="readonly" type="text" value="0" id="txtPageNumber" /> Of </span> </td> <td> <span> <input style="width: 35px; border: none; background: white" readonly="readonly" type="text" id="txtTotalPages" name="name" value="0" /> </span></td> <td> <span title="Next" onclick="GoNextPage();"> <img id="next" width="25" alt="Next" src="../../Icon/next.png" /></span> </td> <td> <span onclick="GoLastPage();" title="Last page"> <img width="25" alt="Go to Last" src="../../Icon/last.png" /> </span> </td> </tr> </table> </div> var FistPage = 0; var NextPage = 10; var PrevPage = 0; var LastPage = 0; var PerPage = 10; var TotalPages = 1; var PageNumber = 1; var Obj = {}; var ArrLen = 0; $(function () { DatePicker(); CustomDate(); $("#dvSalesReport").accordion({ collapsible: true, active: false, autoHeight: false, autoActivate: true }); // $("#spiner").show(); //setTimeout(SearchOrders(), 3000); SearchOrders(); // setTimeout($("#spiner").hide(), 3000); }); function CustomDate() { $("#ddl_Date").change(function () { var DateSelectedIndex = $("#ddl_Date option:selected").index() if (DateSelectedIndex > 6) { $("#tr_frmdat").show(); $("#tr_todat").show(); $("#txt_frmdat").val(''); $("#txt_todat").val(''); } else { $("#tr_frmdat").hide(); $("#tr_todat").hide(); $("#txt_frmdat").val(''); $("#txt_todat").val(''); } }); } function DatePicker() { $('#txt_frmdat').datepicker({ showOn: 'both', buttonImage: 'calendar.gif', buttonImageOnly: true, changeMonth: true, changeYear: true, yearRange: '1920:2020', dateFormat: 'mm/dd/yy' }); $('#txt_todat').datepicker({ showOn: 'both', buttonImage: 'calendar.gif', buttonImageOnly: true, changeMonth: true, changeYear: true, yearRange: '1920:2020', dateFormat: 'mm/dd/yy' }); } /// <reference path="../Webs/Sales/sales-order-review.aspx" /> var DataSalesJson; $("#btnSearchNew").click(function () { SearchOrders(); }) function SearchOrders() { var dataRange = $('#ddl_Date').val(); var SeltdUserIndex = $("#ddl_ShowRslts option:selected").index(); var SelectedSitesIndex = $("#ddl_sites option:selected").index(); var SelectedSitesVal = $('#ddl_sites').val(); var SeltdUserVal = $('#ddl_ShowRslts').val(); var IsShowAll = $('#chk_ShowAll').is(':checked'); var StatusCode = $('#ddl_Status option:selected').val(); var DateFrom = $("#txt_frmdat").val(); var DateTo = $("#txt_todat").val(); $("#spiner").show(); $.ajax({ type: 'POST', contentType: "application/json; charset=utf-8", url: 'sales-order-review.aspx/SearchOrdersReview', data: "{'DateRange':'" + dataRange + "','SeltdUserIndex':'" + SeltdUserIndex + "','SeltdUserVal':'" + SeltdUserVal + "','SelectedSitesIndex':'" + SelectedSitesIndex + "','SelectedSitesVal':'" + SelectedSitesVal + "','IsShowAll':'" + IsShowAll + "','StatusCode':'" + StatusCode + "','DateFrom':'" + DateFrom + "','DateTo':'" + DateTo + "'}", // async: false, success: function (response) { DataSalesJson = response; // DataSalesJson = response.d; var OrderList; try { OrderList = JSON.parse(DataSalesJson); } catch (e) { } FistPage = 0; NextPage = parseInt($("#ddlPerPage option:selected").text());; PrevPage = 0; LastPage = 0; PerPage = parseInt($("#ddlPerPage option:selected").text());; TotalPages = 1; PageNumber = 1; Obj = OrderList; if (Obj == null || (typeof Obj) === 'undefined') { ArrLen = 0; } else { ArrLen = Obj.length; } if (ArrLen > 0) { OnSuccessGenerateOrderReview(); } else { $("#lblTotalAmount").text(''); $("#lblEntries").text(''); var html = ''; html += '<h3 style="font-size: medium;cursor: default;background:cornflowerblue;" class="ui-accordion-header ui-corner-top ui-state-default ui-accordion-icons ui-accordion-header-active ui-state-active" role="tab" id="ui-id-3" aria-controls="ui-id-4" aria-selected="true" aria-expanded="true" tabindex="0"><strong>Agent name</strong><span style="left:45%;position:absolute;"><strong>Order ID</strong></span><span style="position: absolute;left: 60%;"></span><span style="float:right;margin-right:10px;"><strong>Order amount</strong></span></h3>'; html += '<table style=" width: 100%;text-align: center;color: red;"><tr><td>No record found</td></tr></table>' $("#dvSalesReport").html(html); } $("#spiner").hide(); }, error: function () { alert("Error"); $("#spiner").hide(); } }); try { $('#anch_SearchBox').show(); } catch (e) { } } function OnSuccessGenerateOrderReview() { $("#dvSalesReport").html(''); var html = ''; PerPage = parseInt($("#ddlPerPage option:selected").text()); $("#lblEntries").text("Entries:" + ArrLen); TotalPages = ArrLen / PerPage; if (typeof TotalPages === 'number') { if (TotalPages % 1 !== 0) { TotalPages = parseInt(TotalPages); TotalPages = TotalPages + 1; } } if (TotalPages == 1) { NextPage = ArrLen; } $("#txtPageNumber").val(PageNumber); $("#txtTotalPages").val(TotalPages); var LastIndex = NextPage; if (LastIndex > ArrLen) { LastIndex = ArrLen; } var Amount_In_Dollar = 0; var Amount_In_Dollar_Approved = 0; var Amount_In_Dollar_Rejected = 0; var Amount_In_Dollar_Pending = 0; for (var k = 0; k < ArrLen; k++) { Amount_In_Dollar += Obj[k].Amount_In_Dollar; try { if (Obj[k].Is_Reviewed == 0) { Amount_In_Dollar_Pending += Obj[k].Amount_In_Dollar; } else if (Obj[k].Is_Reviewed == 1  Obj[k].ReviewedAs == 1) { Amount_In_Dollar_Approved += Obj[k].Amount_In_Dollar; } else if (Obj[k].Is_Reviewed == 1  Obj[k].ReviewedAs == 0) { Amount_In_Dollar_Rejected += Obj[k].Amount_In_Dollar; } } catch (e) { } } $("#lblTotalAmount").text('$' + Amount_In_Dollar.toFixed(2)); $("#lblApprovedAmount").text('$' + Amount_In_Dollar_Approved.toFixed(2)); $("#lblRejectedAmount").text('$' + Amount_In_Dollar_Rejected.toFixed(2)); $("#lblPendingAmount").text('$' + Amount_In_Dollar_Pending.toFixed(2)); $("#countDIV").css("display", "block"); $("#div_Details").css("margin-top", "105px"); for (var i = PrevPage; i < LastIndex; i++) { var IsReviewd = Obj[i].Is_Reviewed; var ReviewedAs = Obj[i].ReviewedAs; var IsSharedOrder = Obj[i].SharedOrder; var ShareOrderImg = ''; if (IsSharedOrder) { ShareOrderImg = '<span style="left:62%;position:absolute;"><img src="../../img/Shared.png" title="Shared Order" style="margin-left: 10px;width: 20px;" /></span>'; } if (IsReviewd == 1  ReviewedAs == 0) { html += '<h3 style="font-size: medium;background:red;color: white;"><span>' + Obj[i].Users_Name + '</span>'; html += '<span style="left:45%;position:absolute;">' + Obj[i].CustomerOrder_ID + '</span>' + ShareOrderImg + ''; // html += '<span onmouseover="ChatPopup(event,' + i + ');" style="position: absolute;left: 60%;"><img src="../../Icon/tooltip.png" /></span>'; html += '<span style="float:right;margin-right:10px;">' + (Obj[i].Currency) + (Obj[i].CustomerOrder_Amount).toFixed(2) + '</span></h3>'; } else if (IsReviewd == 1  ReviewedAs == 1) { html += '<h3 style="font-size: medium;background: #228B5F;color: white;"><span>' + Obj[i].Users_Name + '</span>'; html += '<span style="left:45%;position:absolute;">' + Obj[i].CustomerOrder_ID + '</span>' + ShareOrderImg + ''; // html += '<span onmouseover="ChatPopup(event,' + i + ');" style="position: absolute;left: 60%;"><img src="../../Icon/tooltip.png" /></span>'; html += '<span style="float:right;margin-right:10px;">' + (Obj[i].Currency) + (Obj[i].CustomerOrder_Amount).toFixed(2) + '</span></h3>'; } else { html += '<h3 style="font-size: medium;"><span>' + Obj[i].Users_Name + '</span>'; html += '<span style="left:45%;position:absolute;">' + Obj[i].CustomerOrder_ID + '</span>' + ShareOrderImg + ''; // html += '<span onmouseover="ChatPopup(event,' + i + ');" style="position: absolute;left: 60%;"><img src="../../Icon/tooltip.png" /></span>'; html += '<span style="float:right;margin-right:10px;">' + (Obj[i].Currency) + (Obj[i].CustomerOrder_Amount).toFixed(2) + '</span></h3>'; } html += '<div>' html += '<div style="min-height:195px;" id=dv1' + i + ' class="reviewReport1">' html += '<div>' html += '<div style="float:left;margin-left: 20px">' html += '<table cellpadding="10" cellspacing="10" style=" margin-left: auto;margin-right: auto;margin-top: 10px;">' html += '<tr><td><strong>Customer Name:</strong></td><td>' + Obj[i].Customer_Name + '</td><td ><span onmouseover="ShowCustPopup(event,' + i + ');"><img src="../../Icon/info.png" /></span></td></tr>' html += '<tr><td><strong>Order Status:</strong></td><td colspan="2">' + Obj[i].OrderStatus_Description + '</td></tr>' html += '</table>' html += '</div>' html += '<div style="float:left;margin-left: 145px">' html += '<table cellpadding="10" cellspacing="10" style=" margin-left: auto;margin-right: auto;margin-top: 10px;">' html += '<tr><td><strong>Added On:</strong></td><td>' + Obj[i].Create_Date + '</td></tr>' html += '<tr><td><strong>Payment Date:</strong></td><td>' + Obj[i].Payment_Date + '</td></tr>' html += '</table>' html += '</div>' html += '<div style="float:left;margin-left: 145px">' html += '<table cellpadding="10" cellspacing="10" style=" margin-left: auto;margin-right: auto;margin-top: 10px;">' var txtCmntID = "Cmnt" + i; var CommentField = ''; // if (IsReviewd) { // CommentField = '<span>Okay</span>'; // } //else { CommentField = '<input style="height:23px;" type="text" id=' + txtCmntID + ' value="' + (Obj[i].Review_Comments == '0' ? '' : Obj[i].Review_Comments) + '" />'; // } html += '<tr><td><strong>Amount:</strong></td><td>' + Obj[i].OrderAmount + '%</td></tr>' html += '<tr><td><strong>Comment:</strong></td><td>' + CommentField + '</td></tr>' // html += '<tr><td><img src="../../img/tick.png" /></td><td><img src="../../img/icn_delete.png" /></td></tr>' html += '</table>'; html += '</div>' html += '</div>' // html += '<div style="clear: both;;">' html += '<table cellpadding="7" cellspacing="0" style=" margin-left: 23px;margin-right: auto;">' var Comments = Obj[i].Comments; var IsDisplayed = 'block'; if (typeof Comments === "undefined") { Comments = ''; IsDisplayed = 'none'; } // html += '<label ><span><strong>References:</strong></span><span style="margin-left: 47px;">' + Obj[i].Reference + '</span></label><br/>' // html += '<label style="display:' + IsDisplayed + ';"><span><strong>Comments:</strong></span><span style="margin-left: 47px;">' + Comments + '</span></label>' html += '<tr ><td><strong>Comments:</strong></td><td colspan="5"><span style="margin-left: 36px;">' + Comments=='0'?'':Comments + '</span></td></tr>' html += '<tr><td><strong>References:</strong></td><td colspan="5"><span style="margin-left: 36px;">' + Obj[i].Reference + '</span></td></tr>'; html += '</table>'; html += '</div>' // html += '<div style="margin-left: 575px;">'; html += '<table><tr>'; //if (IsReviewd) { // html += '<td colspan="2"><span style="margin-left: 65px;"><img src="../../Icon/flag_mark_red.png" title="Already Reviewed"/></span></td>'; //} //else { if (IsReviewd == 1  ReviewedAs == 0) { html += '<td><span onclick="Accept(' + i + ');"><input type="button" value="Approve" class="button_tick" /></span></td>'; } else if (IsReviewd == 1  ReviewedAs == 1) { html += '<td><span onclick="Delete(' + i + ');" style="margin-left: 20px;"><input type="button" value="Reject" class="button_delete" /></span></td>'; } else { html += '<td><span onclick="Accept(' + i + ');"><input type="button" value="Approve" class="button_tick" /></span></td>'; html += '<td><span onclick="Delete(' + i + ');" style="margin-left: 20px;"><input type="button" value="Reject" class="button_delete" /></span></td>'; } html += '<tr>'; // } html += '</table>'; html += '</div>'; html += '</div>'; html += '</div>'; } $("#dvSalesReport").html(html); $("#dvSalesReport").accordion("refresh"); $("#dvSalesReport").prepend('<h3 style="font-size: medium;cursor: default;background:cornflowerblue;" class="ui-accordion-header ui-corner-top ui-state-default ui-accordion-icons ui-accordion-header-active ui-state-active" role="tab" id="ui-id-3" aria-controls="ui-id-4" aria-selected="true" aria-expanded="true" tabindex="0"><strong>Agent name</strong><span style="left:45%;position:absolute;"><strong>Order ID</strong></span><span style="position: absolute;left: 60%;"></span><span style="float:right;margin-right:10px;"><strong>Order amount</strong></span></h3>') $("[id^=ui-id-]").css('height', 'auto'); } function ShowCustPopup(e, index) { var html = ''; var UID = Obj[index].Customer_Email_Address; var PWD = Obj[index].Customer_Password; var UserPrefix = '', PasswordPrefix = '', FolderPath = '', CustomerCodeBind = Obj[index].Customer_Code, SiteID = 0, TicketURL = 'http://www.24activ.com/tickets/scp/tickets.php?a=search if (Obj[index].DOMAIN == 'www.contentproz.net') { UserPrefix = 'wu'; PasswordPrefix = 'wp'; FolderPath = '/webs/signin.aspx?'; SiteID = 1; } else { UserPrefix = 'uid'; PasswordPrefix = 'pas'; FolderPath = '/login.aspx?'; SiteID = 3; } var HomeLink = 'http://' + Obj[index].DOMAIN + FolderPath + UserPrefix + '=' + Encrypt(UID) + ' + PasswordPrefix + '=' + Encrypt(PWD) + ''; var MailTo = 'OSTicket-PostPage.aspx?w=' + CustomerCodeBind + ' + SiteID; html += '<div>' html += '<table cellspacing="5"><tr>' html += '<td style="width:30px;"> <a title="Home" target="_blank" id="anch_acc" href=' + HomeLink + '><img src="/img/goto_area_customer.png" width="20px" /></a></td>' html += '<td style="width:30px;"> <a title="Email" id="anch_acc" target="_blank" href=' + MailTo + '><img src="/img/mail_customer.png" width="20px" /></a></td>' html += '<td > <a id="anch_acc" title="Ticket" href=' + TicketURL + UID + ' target="_blank"><img src="/img/ticket_customer.png" width="20px" /></a></td>' html += '</tr></table>' html += '</div>' $("#dvCustomerInfo").html(html); var leftPos = e.pageX; var topPos = e.pageY; $('#dvCustomerInfo').toggleClass('opened'); $("#dvCustomerInfo").offset({ left: leftPos, top: topPos }); } //Encyption function Encrypt(stringToEncrpt) { var returnEncrptData = ''; $.ajax({ type: 'POST', contentType: "application/json; charset=utf-8", url: 'sales-order-review.aspx/Encryption', data: "{'stringToEncrpt':'" + stringToEncrpt + "'}", async: false, success: function (response) { returnEncrptData = response; }, error: function () { alert("Error"); } }) return returnEncrptData; } $(document).click(function (e) { if (!$(e.target).parents().andSelf().is('.show_alerts')) { $("#dvCustomerInfo").removeClass("opened"); } }); $("#dvCustomerInfo").click(function (e) { e.stopPropagation(); }); function HidePopup() { $("#dvChat").hide(); } function ChatPopup(e, index) { var html = ''; html += '<div>' var Comments = Obj[index].Comments; if (typeof Comments === "undefined") { Comments = ''; } html += '<label><strong>Comments:</strong>' + Comments + '</label><br />' html += '<label><strong>Reference:</strong>' + Obj[index].Reference + '</label>' html += '</div>' $("#dvChat").html(html); var leftPos = e.pageX; var topPos = e.pageY; $("#dvChat").show(); $("#dvChat").offset({ left: leftPos, top: topPos }); } $(document).click(function (e) { if ($(e.target).closest('#dvChat').length != 0) return false; $('#dvChat').hide(); }); function Accept(index) { var orderID = Obj[index].CustomerOrder_ID; var Comments = $("#Cmnt" + index).val(); var MyOrder_ID = parseInt(Obj[index].MyOrder_ID); // var Comments = Obj[index].Comments; $.ajax({ type: 'POST', contentType: "application/json; charset=utf-8", url: 'sales-order-review.aspx/Accept', data: "{'orderID':'" + orderID + "','Comments':'" + Comments + "','MyOrder_ID':'" + MyOrder_ID + "'}", async: false, success: function (response) { RemoveObjElement(index); alert("Successfully Accepted") }, error: function () { alert("Error"); } }) } function RemoveObjElement(index) { delete Obj[index] ArrLen = ArrLen - 1; var len = ArrLen; var _PerPage = parseInt($("#ddlPerPage option:selected").text()); if (ArrLen % _PerPage == 0  index == ArrLen) { PageNumber = PageNumber - 1; } if (index == 0) { var inc = 0; //Delete first element from array object for (var i = 0; i < len; i++) { inc = i + 1; Obj[i] = Obj[inc]; } } else if (index == ArrLen) { NextPage = NextPage - 1; PrevPage = PrevPage - _PerPage; } else if (index > 0  index < ArrLen) { //Delete element somewhere in the list from array object var inc = 0; for (var i = index; i < len; ++i) { inc = i + 1; Obj[i] = Obj[inc]; } } OnSuccessGenerateOrderReview(); } function Delete(index) { var orderID = Obj[index].CustomerOrder_ID; var Comments = $("#Cmnt" + index).val(); var MyOrder_ID = parseInt(Obj[index].MyOrder_ID); // var Comments = Obj[index].Comments; $.ajax({ type: 'POST', contentType: "application/json; charset=utf-8", url: 'sales-order-review.aspx/Delete', data: "{'orderID':'" + orderID + "','Comments':'" + Comments + "','MyOrder_ID':'" + MyOrder_ID + "'}", async: false, success: function (response) { RemoveObjElement(index); alert("Successfully Rejected") }, error: function () { alert("Error"); } }) } function GoLastPage() { if (PageNumber == TotalPages) { return false; } PageNumber = TotalPages; $("#txtPageNumber").val(PageNumber); NextPage = ArrLen; var PageEntry = parseInt($("#ddlPerPage option:selected").text()); var temp = (parseInt(NextPage / PageEntry)) * PageEntry; var isInteger = NextPage / PageEntry; if (typeof isInteger === 'number') { if (isInteger % 1 !== 0) { PrevPage = temp; } else { PrevPage = NextPage - PageEntry; } } OnSuccessGenerateOrderReview(); } function GoFirstPage() { if (PageNumber == 1) { return false; } PageNumber = 1; $("#txtPageNumber").val(PageNumber); PrevPage = 0; NextPage = parseInt($("#ddlPerPage option:selected").text()); OnSuccessGenerateOrderReview(); } function GoPrevPage() { if (PageNumber == 1) { return false; } PageNumber = PageNumber - 1; $("#txtPageNumber").val(PageNumber); NextPage = PrevPage; PrevPage = PrevPage - parseInt($("#ddlPerPage option:selected").text()); OnSuccessGenerateOrderReview(); } function GoNextPage() { if (PageNumber == TotalPages) { return false; } PageNumber = PageNumber + 1; $("#txtPageNumber").val(PageNumber); PrevPage = NextPage; NextPage = NextPage + parseInt($("#ddlPerPage option:selected").text()); OnSuccessGenerateOrderReview(); } function PerPageEntries() { $("#spiner").show(); PerPage = parseInt($("#ddlPerPage option:selected").text()); TotalPages = ArrLen / PerPage; if (typeof TotalPages === 'number') { if (TotalPages % 1 !== 0) { TotalPages = parseInt(TotalPages); TotalPages = TotalPages + 1; } } PageNumber = 1; PrevPage = 0; $("#txtPageNumber").val(PageNumber); $("#txtTotalPages").val(TotalPages); NextPage = parseInt($("#ddlPerPage option:selected").text()) OnSuccessGenerateOrderReview(); $("#spiner").hide(); } function DateFormat(date) { var orderdate = new Date(parseInt(date.replace("/Date(", "").replace(")/", ""), 0)); return orderdate.toDateString(); } function ShowCustomDate() { alert("test") } 
0
ответ дан Muhammad Yahya 09 нояб. '17 в 15:13 2017-11-09 15:13

Другие вопросы по меткам или Задайте вопрос