Javascript 通过AJAX从JSON设置值
我正在使用Github Gists作为一个辅助项目制作一个网络游乐场。我将两个json文件加载到编辑器中。1处理所有库(jquery、bootstrap等),另一个处理用户设置(fontsize、version等) 所以无论如何,我有这个JSON命名的设置Javascript 通过AJAX从JSON设置值,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我正在使用Github Gists作为一个辅助项目制作一个网络游乐场。我将两个json文件加载到编辑器中。1处理所有库(jquery、bootstrap等),另一个处理用户设置(fontsize、version等) 所以无论如何,我有这个JSON命名的设置 var settings = gistdata.data.files["settings.json"].content var jsonSets = JSON.parse(settings) 我解析并试图从JSON中获取一个对象,并将其
var settings = gistdata.data.files["settings.json"].content
var jsonSets = JSON.parse(settings)
我解析并试图从JSON中获取一个对象,并将其设置为输入文本框的值
现在console.log(jsonSets.sitetTitle)
工作得非常好
但当我尝试动态更改输入时
$("[data-action=sitetitle]").val(jsonSets.siteTitle).trigger("change")
问题是它没有实际应用该值
我成功应用该值的唯一方法是
setTimeout(function() {
$("[data-action=sitetitle]").val(jsonSets.siteTitle).trigger("change")
}, 5000)
速度慢得可笑
有人知道为什么不应用该值吗?此外。
我怎样才能解决这个问题
var hash = window.location.hash.substring(1)
if (window.location.hash) {
function loadgist(gistid) {
$.ajax({
url: "https://api.github.com/gists/" + gistid,
type: "GET",
dataType: "jsonp"
}).success(function(gistdata) {
var libraries = gistdata.data.files["libraries.json"].content
var settings = gistdata.data.files["settings.json"].content
var jsonLibs = JSON.parse(libraries)
var jsonSets = JSON.parse(settings)
// Return libraries from json
$.each(jsonLibs, function(name, value) {
$(".ldd-submenu #" + name).prop("checked", value)
})
// Return font settings from json
var siteTitle = jsonSets.siteTitle
var WeaveVersion = jsonSets.version
var editorFontSize = jsonSets.editorFontSize
var WeaveDesc = jsonSets.description
var WeaveAuthor = jsonSets.author
$("[data-action=sitetitle]").val(siteTitle).trigger("change")
$("[data-value=version]").val(WeaveVersion).trigger("change")
$("[data-editor=fontSize]").val(editorFontSize).trigger("change")
$("[data-action=sitedesc]").val(WeaveDesc).trigger("change")
$("[data-action=siteauthor]").val(WeaveAuthor).trigger("change")
}).error(function(e) {
// ajax error
console.warn("Error: Could not load weave!", e)
})
}
loadgist(hash)
} else {
// No hash found
}
我的问题实际上与本地存储有关。
我清除了它
localStorage.clear()代码>在之后运行ajax函数,解决了问题
var hash = window.location.hash.substring(1)
if (window.location.hash) {
localStorage.clear()
function loadgist(gistid) {
$.ajax({
url: "https://api.github.com/gists/" + gistid,
type: "GET",
dataType: "jsonp",
jsonp: "callback"
}).success(function(gistdata) {
var htmlVal = gistdata.data.files["index.html"].content
var cssVal = gistdata.data.files["index.css"].content
var jsVal = gistdata.data.files["index.js"].content
var mdVal = gistdata.data.files["README.md"].content
var settings = gistdata.data.files["settings.json"].content
var libraries = gistdata.data.files["libraries.json"].content
var jsonSets = JSON.parse(settings)
var jsonLibs = JSON.parse(libraries)
// Return font settings from json
var siteTitle = jsonSets.siteTitle
var WeaveVersion = jsonSets.version
var editorFontSize = jsonSets.editorFontSize
var WeaveDesc = jsonSets.description
var WeaveAuthor = jsonSets.author
$("[data-action=sitetitle]").val(siteTitle)
$("[data-value=version]").val(WeaveVersion)
$("[data-editor=fontSize]").val(editorFontSize)
$("[data-action=sitedesc]").val(WeaveDesc)
$("[data-action=siteauthor]").val(WeaveAuthor)
storeValues()
// Return settings from the json
$(".metaboxes input.heading").trigger("keyup")
// Return libraries from json
$.each(jsonLibs, function(name, value) {
$(".ldd-submenu #" + name).prop("checked", value).trigger("keyup")
})
// Set checked libraries into preview
$("#jquery").trigger("keyup")
// Return the editor's values
mdEditor.setValue(mdVal)
htmlEditor.setValue(htmlVal)
cssEditor.setValue(cssVal)
jsEditor.setValue(jsVal)
}).error(function(e) {
// ajax error
console.warn("Error: Could not load weave!", e)
})
}
loadgist(hash)
} else {
// No hash found
}
尝试将jsonp:'callback'
添加到dataType:'jsonp'
lol的正后方,我需要做的就是在调用ajax之前的开头添加localStorage.clear()
。谢谢你的提示。这会派上用场的。