我有一个javascript对象,我是从JSONP文件中收到的。
该对象包含多个“选项”和“结果”,用于在用户点击时调整页面上的html。
现在,我能够检查json文件中是否存在HTML字符串(通过json引用插入)。我想要做的是获取该字符串,在json文件中找到下一个“结果”或“选项”,然后返回“选项”或“结果”值,以便我可以使用它来更改html ... < / p>
我该怎么做?我一直在尝试.indexOf方法来查找当前索引,但这并没有真正帮助我找到像“选项”这样的特定属性。
这是我用来迭代JSONP文件并查找当前字符串是否存在的代码。
$.ajax({
url: "http://www.myurl.com/jsonp.php",
type: "GET",
dataType: "jsonp",
jsonpCallback: "otmjsonp",
async: false,
success: function (JSON) {
$(".result").on("click", function () {
var currentResult = $(this).text(); //.result is the line of HTML the user has clicked
for (var playerSelection in JSON) {
if (JSON.hasOwnProperty(playerSelection)) {
if (JSON[playerSelection] === currentResult) {
alert("this selection exists in the JSON");
}
}
}
})
}
});
这是一个非常简单的大型JSONP文件版本:
otmjsonp({
"situation1" : "Your opponent is trying to tackle you", "playerPrompt1" : "What will you do first?",
"option1" : "avoid him",
"result1" : "he tackles you",
"situation2" : "you were tackled", "playerPrompt2" : "Your opponent begins to slow down",
"option2" : "chase after him",
"result2" : "you caught up",
)}
等。等
即使模糊的想法/方向也会受到赞赏,因为我完全陷入困境。
答案 0 :(得分:1)
如果重新构造JSON以将选项/结果嵌套在相应的父级中,则可以轻松获得所有可能的选项。您需要将代码更改为:
$.ajax({
url: "http://www.myurl.com/jsonp.php",
type: "GET",
dataType: "jsonp",
jsonpCallback: "otmjsonp",
async: false,
success: function (JSON) {
$(".result").on("click", function () {
var currentResult = $(this).text(); //.result is the line of HTML the user has clicked
if (JSON.hasOwnProperty(playerSelection)) {
for (var outcome in JSON[playerSelection]) {
if (JSON[playerselection].hasOwnProperty(outcome)) {
alert("This is the next outcome " + JSON[playerSelection][outcome]);
}
}
}
})
}
});
答案 1 :(得分:1)
我建议您进一步思考并组织JSON结构。有组织的逻辑JSON将使Javascript更容易。对于这种情况 - 尽管我可以从描述和示例中收集到 - 我认为JSON结构具有逻辑意义并且在以后的Javascript中证明是有用的可能看起来像这样:
{
'situations': [
{
'description': 'Your opponent is trying to tackle you.',
'prompt': 'What will you do?',
'options': [
{
'action': 'Avoid him.',
'result': 'He tackles you.'
},
{ /* another option (an action plus a result) */ }
]
},
{ /* another situation (a description, a prompt, and an array of options) */ }
]
}
我知道这不是你问题的完整答案,但我认为这是开始重新思考你的方法的好地方。
答案 2 :(得分:1)
此处的部分问题是您如何将UI与数据初始化相结合。我认为你真正想做的是分离出JSON请求,从处理点击中获取数据。
$(function() {
var setupHTML,
handleClick,
updateHTML,
originalData,
resultData;
updateHTML = function(JSON) {
// Add or activate the html the person is clicking
$('.result').text()
};
handleClick = function(e) {
var currChoice = $(e.target).text();
if (resultData === undefined) {
e.stopPropagation();
e.preventDefault();
return;
}
for (var ps in resultData) {
if (resultData.hasOwnProperty(ps) && resultData[ps] === currChoice) {
resultData = resultData[ps];
updateHTML(resultData);
}
}
}
$('.result').on('click', handleClick)
$.ajax({
url: "http://www.myurl.com/jsonp.php",
type: "GET",
dataType: "jsonp",
jsonpCallback: "otmjsonp",
async: false,
success: function(data) {
resultData = origData = data;
// make the UI visible
setupHTML(JSON);
}
});
});
答案 3 :(得分:0)
您可以访问以下对象属性:Object.property
或Object['some property']
。您可以使用for in
循环遍历Objects和大多数Arrays,例如:
var property, value;
for(var i in Object){
property = i;
value = Object[i];
}