Професионална програма
Loading...
+ Нов въпрос
vitaliti avatar vitaliti 35 Точки

[Technical Issue] Homework BaaS и Parse

Здравейте колеги.

Ако може някой да ми обясни защо това не работи.
И защо когато махна Ифито и напиша във конзолата на chrome showCountries(),
ми излиза списъка с държавите и красивия css,както трябва.

Тагове:
0
JavaScript Applications 21/04/2015 10:08:25
AleksandurSeferinkin avatar AleksandurSeferinkin 335 Точки
Best Answer

Не! Не го прави със 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" );

3
21/04/2015 08:41:23
a.angelov avatar a.angelov 1317 Точки

Не! Не го прави със success, защото е deprecated! :) За подобни неща ползваме $.ajax().done().fail().always().

Това веднага ме кара да попитам - защо при това положение лекции, дема се правят със success, error?

1
AleksandurSeferinkin avatar AleksandurSeferinkin 335 Точки

Аз лично бих го правил със success и error, за да ви покажа грешния начин. После на изпита като видя, че все още пишете по грешния начин, ще стигна до извода, че не сте си направили труда да влезнете тук и да се поинтересувате. След което ще направя заключението, че не научили основните неща в програмирането и ще имам пълните основания да си мисля, че не сте за тази професия. Това ще е много добър повод да пиша двойки дори програмата да работи коректно.

В официалния сайт си има доста добре изглеждащ жълт правоъгълник, гласящ следното:

Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks are deprecated as of jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

Проблема не е в лектора и демата, а в колегите, които не си правят труда да се поинтересуват.

ПС: Стана ми интересно и на мен защо в демата ползват deprecated методи. :)

0
21/04/2015 11:18:51
a.angelov avatar a.angelov 1317 Точки

Информацията в сайта я видях, благодаря.

Но не съм съгласен, че трябва да се показват deprecated начините на лекции и да се разчита, че всеки ще успее да прочете и види правилния начин. Все пак очакваме на лекции да ни говорят и показват как се правят нещата.

На други курсове тук си спомням, че често имаше моменти, в които се показват грешни неща и се набляга на това, че не трябва да се ползват и се казва как е правилно.

Та и в случая - няма лошо да ни се покаже как не трябва, но да се каже, че не се прави така и да се даде правилния начин :)

2
p.yordanov avatar p.yordanov 51 Точки

Така като гледам става така, защото не чакаш да се изпълни get заявката преди да почнеш да обработваш данните. Дом обработката трябва да се случи във ajax request-а при success.

0
a.angelov avatar a.angelov 1317 Точки

При всички случаи работи с данните получени от дадена заявка през success callback-а, защото заявките са асинхронни и може да се получи така, че да нямаш още данните, а да се опитваш да ги обработваш. Видях, че си сложил флаг false на async пропъртито на заявката вероятно за да избегнееш горния сценарий, но да знаеш, че свети предупреждение в конзолата, че не е препоръчително да се ползва :)

ПС. При мен проработи с ифиито, заредиха ми се страните и даже промених името на една от тях :) Но имаш още някаква грешка, защото която и страна да едитна се сменя името само на последната - явно objectId-то не е коректно...

 

2
vitaliti avatar vitaliti 35 Точки

Интересно.При мен само  предупреждението в конзолата свети.Няма добавени елементи,няма други грешки,нищо.
Празна страница и това е.Иначе данните си ги взимам и обработвам без проблеми.В дебъгера на Chrome всичко е  OK .
Даже си копнах линка от PasteBin и пак нищо.В Html фйла имам само 1 div с id='wrapper' и там jquery i app.js и тва е.Ще го направя със success callback-а :( .

0
20/04/2015 23:23:32
AleksandurSeferinkin avatar AleksandurSeferinkin 335 Точки

Променя се само последната (и ще се трие само последната), защото колегата забравя за scope на променливите.

В цикъла във функцията showCountries():

var id = data.results[i].objectId;

Тази променлива скача най-отгоре в същата функция. Той дефинира по една функция на всеки бутон, обаче всичките те реферират точно тази променлива. Това означава, че след приключването на цикъла, всички click handler-и ще реферират към една и съща променлива, която ще пази последната зададена стойност.

В такива случаи може да направи следното:

var btnDelete = $('<button>').text('DELETE').click(function () {
     var targetId = id;
});

Така ще се копира стойността на това id и ще се пази в closure.

0
21/04/2015 14:23:58