Я использую код HTML, JavaScript и узлы для разработки расширения Chrome.
При загрузке страницы я вызываю функцию getBalance()
, чтобы получить данные и привязать их к диапазону HTML. Ниже приведен мой код:
function getBalance() {
var request = new XMLHttpRequest();
request.open('GET', 'http://xxx.xxx.xx.xxx:xxxx/getAccount?address=xxxxxxxxxxxxxxxxxxxx', true);
request.onload = function () {
var data = JSON.parse(this.response);
if (request.status >= 200 && request.status < 400) {
var bal = data.Balance;
var etherprice = bal / 1000000000000000000;
document.getElementById("accbal").innerHTML = etherprice;
} else {
console.info('error');
}
}
request.send(null);
}
window.addEventListener('load', function load(event){
getBalance();
});
function sendTransactionBroadcast(result){
var doAjax = function() {
$.ajax({
type : "POST",
url : "http://xxx.xxx.xx.xxx:xxxx/broadcast",
data: JSON.stringify(result),
contentType: 'text/plain; charset=UTF-8',
success:function(json){
console.info(json);
getBalance();
},
error: function() {
alert("Error");
}
});
}
doAjax();
}
sendTransactionBroadcast()
функция вызывается по нажатию кнопки, эта функция имеет ajax асинхронный POST-вызов. После завершения выполнения, в случае успеха, я хочу обновить данные из функции getBalance()
и привязать их к диапазону. Итак, я снова называю это успехом ajax. Проблема в том, что если я устанавливаю отладчик и отлаживаю код построчно, я получаю обновленные данные в span innerHTML. Все идет хорошо. Но если я закрою отладчик и нажму кнопку, span innerHTML не изменится в пользовательском интерфейсе. Я не понимаю, почему? Также иногда менялось иногда нет.
Это проблема с асинхронным ответом ajax или что-то еще? Как это решить?
manifest.json
{
"manifest_version": 2,
"name": "C Wallet",
"description": "The C Wallet in your browser",
"version": "1.0",
"browser_action": {
"default_icon": "Image/CI_logo-01.png",
"default_popup": "popup.html"
},
"icons": { "16": "Image/CI_logo-01.png",
"48": "Image/CI_logo-01.png",
"128": "Image/CI_logo-01.png"
},
"permissions": [
"activeTab"
]
}
Я попробовал это, теперь я узнаю, что при первом нажатии кнопки он работает нормально. При втором нажатии не обновляется.
Ваш код, кажется, работает так, как ожидалось! Я попробовал это с поддельным API, он работает нормально. Он также обновляет цену при последующих кликах.
@Saroj, ты использовал его в расширении Chrome?
Неа. Просто попробуйте это с помощью простого html и js.
Хорошо, но на простом HTML и js это будет работать.
Расширения имеют разные части с разными разрешениями, ограничениями и возможностями. Вам нужно предоставить больше информации, например, manifest.json, и описать, где именно выполняется опубликованный фрагмент кода.
@wOxxOm, пожалуйста, проверьте манифест.
Ну, я нашел проблему. Поскольку я использовал HTMLbutton type = "submit"
, это было причиной того, что страница загружалась, а данные не менялись в соответствии с тем, что я устанавливал. Это было сброшено. Чтобы избежать загрузки страницы, я использовал button type = "button"
, и все проблемы были решены.
На первый взгляд кажется, что ваша функция
getBalance
кэширует некоторые значения: попробуйтеrequest.open('GET', 'http://xxx.xxx.xx.xxx:xxxx/getAccount?address=xxxxxxxxxxxxxxxxxxxx&someRandomValue=' + Date.now() , true);
Это должно заставить браузер извлекать данные с сервера, а не из кеша браузера.