[Technical Issue] Homework BaaS и Parse
Здравейте колеги.
Ако може някой да ми обясни защо това не работи.
И защо когато махна Ифито и напиша във конзолата на chrome showCountries(),
ми излиза списъка с държавите и красивия css,както трябва.
Здравейте колеги.
Ако може някой да ми обясни защо това не работи.
И защо когато махна Ифито и напиша във конзолата на chrome showCountries(),
ми излиза списъка с държавите и красивия css,както трябва.
Не! Не го прави със success, защото е deprecated! :) За подобни неща ползваме $.ajax().done().fail().always().
Също така никога не ползвай една променлива ( в случая data ) за няколко неща. Във функцията "PUT" можеше да напишеш нещо от сорта на var dataToSend = {...};
Можеш директно да върнеш резултата от $.ajax(), което е deferred promise и да го ползваш извън функцията - пример
При теб проблема е може би в това, че си сложил скриптовете в head. Браузъра прави синхронна GET заявка и се опитва да зашие данните в елемента с id #wrapper, който все още не е зареден от браузъра, защото не е стигнал до там. В такъв случай е удачно да сложиш скриптовете точно преди затварящия таг на </body> или да сложиш кода в $(function(){}), вместо в IIFE.
jQuery няма да ти върне грешка ако работиш с несъществуващ елемент, защото така. Ако напишеш $("#nesushtestvuvashtElement").text() няма да стане абсолютно нищо... просто работиш с празна колекция. Затуй много хора за дебъгерски цели правят нещо от сорта на :
var element = $( "#id" );
if ( element.length === 0 ) throw Error("ne trqbvashe da se stiga do tuk" );
Така като гледам става така, защото не чакаш да се изпълни get заявката преди да почнеш да обработваш данните. Дом обработката трябва да се случи във ajax request-а при success.
При всички случаи работи с данните получени от дадена заявка през success callback-а, защото заявките са асинхронни и може да се получи така, че да нямаш още данните, а да се опитваш да ги обработваш. Видях, че си сложил флаг false на async пропъртито на заявката вероятно за да избегнееш горния сценарий, но да знаеш, че свети предупреждение в конзолата, че не е препоръчително да се ползва :)
ПС. При мен проработи с ифиито, заредиха ми се страните и даже промених името на една от тях :) Но имаш още някаква грешка, защото която и страна да едитна се сменя името само на последната - явно objectId-то не е коректно...
Интересно.При мен само предупреждението в конзолата свети.Няма добавени елементи,няма други грешки,нищо.
Празна страница и това е.Иначе данните си ги взимам и обработвам без проблеми.В дебъгера на Chrome всичко е OK .
Даже си копнах линка от PasteBin и пак нищо.В Html фйла имам само 1 div с id='wrapper' и там jquery i app.js и тва е.Ще го направя със success callback-а :( .
Променя се само последната (и ще се трие само последната), защото колегата забравя за scope на променливите.
В цикъла във функцията showCountries():
var id = data.results[i].objectId;
Тази променлива скача най-отгоре в същата функция. Той дефинира по една функция на всеки бутон, обаче всичките те реферират точно тази променлива. Това означава, че след приключването на цикъла, всички click handler-и ще реферират към една и съща променлива, която ще пази последната зададена стойност.
В такива случаи може да направи следното:
var btnDelete = $('<button>').text('DELETE').click(function () {
var targetId = id;
});
Така ще се копира стойността на това id и ще се пази в closure.
Не! Не го прави със success, защото е deprecated! :) За подобни неща ползваме $.ajax().done().fail().always().
Това веднага ме кара да попитам - защо при това положение лекции, дема се правят със success, error?
Аз лично бих го правил със success и error, за да ви покажа грешния начин. После на изпита като видя, че все още пишете по грешния начин, ще стигна до извода, че не сте си направили труда да влезнете тук и да се поинтересувате. След което ще направя заключението, че не научили основните неща в програмирането и ще имам пълните основания да си мисля, че не сте за тази професия. Това ще е много добър повод да пиша двойки дори програмата да работи коректно.
В официалния сайт си има доста добре изглеждащ жълт правоъгълник, гласящ следното:
Deprecation Notice: The
jqXHR.success()
,jqXHR.error()
, andjqXHR.complete()
callbacks are deprecated as of jQuery 1.8. To prepare your code for their eventual removal, usejqXHR.done()
,jqXHR.fail()
, andjqXHR.always()
instead.Проблема не е в лектора и демата, а в колегите, които не си правят труда да се поинтересуват.
ПС: Стана ми интересно и на мен защо в демата ползват deprecated методи. :)
Информацията в сайта я видях, благодаря.
Но не съм съгласен, че трябва да се показват deprecated начините на лекции и да се разчита, че всеки ще успее да прочете и види правилния начин. Все пак очакваме на лекции да ни говорят и показват как се правят нещата.
На други курсове тук си спомням, че често имаше моменти, в които се показват грешни неща и се набляга на това, че не трябва да се ползват и се казва как е правилно.
Та и в случая - няма лошо да ни се покаже как не трябва, но да се каже, че не се прави така и да се даде правилния начин :)