Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...
Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена для вас, поэтому простым языком ваш результат undefined
на первом этапе, поэтому вы получили result = undefined
до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...
Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?
Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.
Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:
$(document).ready(function(){
function foo() {
$.ajax({url: "api/data", success: function(data){
fooDone(data); //after we have data, we pass it to fooDone
}});
};
function fooDone(data) {
console.log(data); //fooDone has the data and console.log it
};
foo(); //call happens here
});
Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.
document.getElementById("myspan").innerHTML="newtext";
EDIT Для современных браузеров:
document.getElementById("myspan").textContent="newtext";
Для этого диапазона
<span id="name">sdfsdf</span>
Вы можете пойти так: -
$("name").firstChild.nodeValue = "Hello" + "World";
Как и в другом ответе, innerHTML и innerText не рекомендуется, лучше использовать textContent . Этот атрибут хорошо поддерживается, вы можете это проверить: http://caniuse.com/#search=textContent
document.getElementById("myspan").textContent="newtext";
это выберет dom-узел с id myspan
и изменит его текстовое содержимое на new text
Использование innerHTML НЕ РЕКОМЕНДУЕТСЯ. Вместо этого вы должны создать textNode. Таким образом, вы «привязываете» свой текст, и вы, по крайней мере, в этом случае не уязвимы для атаки XSS.
document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!!
Правильный путь:
span = document.getElementById("myspan");
txt = document.createTextNode("your cool text");
span.appendChild(txt);
Дополнительные сведения об этой уязвимости: Скрипт кросс-сайта (XSS) - OWASP
Отредактировано ноябрь 4th 2017:
Изменена третья строка кода в соответствии с @mumush предложение: «использовать appendChild () вместо». Кстати, согласно @Jimbo Jonny Я думаю, что все должно рассматриваться как пользовательский ввод, применяя принцип безопасности по слоям. Таким образом, вы не встретите сюрпризов.
document.getElementById('myspan').innerHTML = 'newtext';
Я использую Jquery
, и ни одно из приведенных выше не помогло, я не знаю, почему, но это сработало:
$("#span_id").text("new_value");
Вот еще один способ:
var myspan = document.getElementById('myspan');
if (myspan.innerText) {
myspan.innerText = "newtext";
}
else
if (myspan.textContent) {
myspan.textContent = "newtext";
}
Свойство innerText будет обнаружено Safari, Google Chrome и MSIE. Для Firefox стандартным способом делать вещи было использование textContent, но с версии 45 он тоже имеет свойство innerText, так как кто-то любезно сообщил мне недавно. Это решение проверяет, поддерживает ли браузер одно из этих свойств, и если это так, назначает «новый текст».
Live demo: здесь
EDIT: Это было написано в 2014 году. Вероятно, вы больше не заботитесь о IE8 и можете забыть об использовании innerText
. Просто используйте textContent
и делайте с ним, hooray.
Если вы тот, кто снабжает текст, и никакая часть текста не предоставляется пользователем (или другим источником, который вы не контролируете ), тогда установка innerHTML
может быть приемлемой:
// * Fine for hardcoded text strings like this one or strings you otherwise
// control.
// * Not OK for user-supplied input or strings you don't control unless
// you know what you are doing and have sanitized the string first.
document.getElementById('myspan').innerHTML = 'newtext';
Однако, как отмечают другие, если вы не являетесь источником какой-либо части текстовой строки, использование innerHTML
может подвергать вас контенту инъекции, такие как XSS, если вы не будете осторожны, чтобы правильно дезинфицировать текст.
Если вы используете ввод от пользователя, вот один из способов сделать это безопасно, одновременно поддерживая совместимость между браузерами: / g3]
var span = document.getElementById('myspan');
span.innerText = span.textContent = 'newtext';
Firefox не поддерживает innerText
, а IE8 не поддерживает textContent
, поэтому вам нужно использовать оба варианта, если вы хотите поддерживать совместимость между браузерами.
И если вы хотите избежать переплавов (вызванных innerText
), где это возможно:
var span = document.getElementById('myspan');
if ('textContent' in span) {
span.textContent = 'newtext';
} else {
span.innerText = 'newtext';
}