- 13, May 2024
- #1
У меня возникли проблемы с ajax и обратными вызовами. Кажется, я никогда этому не научусь, лол.
Следующий код находится в моем главном окне игры, которое является браузерным клиентом. Я вызываю набор символов, который просто извлекает имя персонажа из БД. Обратный вызов .done в jquery, похоже, запускает только одну часть.
Когда я могу позвонить ему из другого места, оно не определено.
При нажатии на ссылку вызывается путешествие с аргументами для обновления местоположения персонажа в БД. Это тоже не работает.
Это все еще мое непонимание Async и обратных вызовов? Или что-то другое?
Следующий код находится в моем главном окне игры, которое является браузерным клиентом. Я вызываю набор символов, который просто извлекает имя персонажа из БД. Обратный вызов .done в jquery, похоже, запускает только одну часть.
function CharacterTraveler()
{
this.travel = function(nameSet, areaSet, regionSet, ParserObj)
{
$.ajax({
method: "POST",
url: "php/game/set_character_location.php",
context:this,
data: { nameObj: nameSet, areaObj: areaSet, regionObj: regionSet, characterNameObj:characterName }
})
.done(function( data ) {
if(data != '')
{
alert(data);
}
});
}
}
Код (разметка): следующий код находится в файле символов.js.
в качестве примечания, если я предупреждаю this.name из .done, у него есть значение, но эта функция this.return_name() никогда не хочет вызывать.
Когда я могу позвонить ему из другого места, оно не определено.
$( '#output' ).on( 'click', 'a', {parserObj:Parser, characterItem:CharacterObj}, function(event){ var elem = event.target; switch(elem.getAttribute('type')) { case 'goto': // alert(event.data.characterItem.return_name()); //Traveler.travel(elem.getAttribute('name'), elem.getAttribute('area'), elem.getAttribute('region'), Parser); break; } });
Код (разметка): this.return_name() никогда не срабатывает.
Основная проблема, которая заставила меня искать эту ошибку, — это закомментированный код из окна.
function Character() { var name; this.set_name = function() { $.ajax({ method: "POST", url: "php/game/misc/get_character_name.php", }).done(function( data ) { if(data != '') { this.name = data; this.return_name(); } }); } this.return_name = function() { alert('In Return Name'); } }
Код (разметка): ссылки добавляются динамически из других скриптов.
При нажатии на ссылку вызывается путешествие с аргументами для обновления местоположения персонажа в БД. Это тоже не работает.
$(document).ready(function(){ var Parser = new CommandParser(); var OutputObj = new Output(); var Traveler = new CharacterTraveler(); var CharacterObj = new Character(); CharacterObj.set_name(); $("#maininput").on("input propertychange", function(){ var val = $('#maininput').val(); Parser.update(val); }); $("#inputsubmit").click(function(){ Parser.submit_command(OutputObj); }); $( '#output' ).on( 'click', 'a', {parserObj:Parser, characterItem:CharacterObj}, function(event){ var elem = event.target; switch(elem.getAttribute('type')) { case 'goto': // alert(event.data.characterItem.return_name()); //Traveler.travel(elem.getAttribute('name'), elem.getAttribute('area'), elem.getAttribute('region'), Parser); break; } }); });
Код (разметка): Любая идея.
Это все еще мое непонимание Async и обратных вызовов? Или что-то другое?