我向PHP脚本发出了一个Ajax请求,并且PHP脚本返回了这个JSON对象,当我用link text进行测试时,它说它是有效的
[
{
"id_annotation": "1",
"annot_doc_id": "page_de_test.html",
"annot_id_auteur": "2",
"anno_startOffset": "47",
"annot_startContainer": "id-aaa",
"annot_endOffset": "88",
"annot_forme": "1",
"annot_value": "dispositif physique fait pour \n stocker ",
"annot_obj": "1",
"annot_area": "",
"annot_date": "vendredi 25 juin 2010 10:38:07"
},
{
"id_annotation": "2",
"annot_doc_id": "page_de_test.html",
"annot_id_auteur": "2",
"anno_startOffset": "122",
"annot_startContainer": "id-aaa",
"annot_endOffset": "200",
"annot_forme": "1",
"annot_value": " le plus simple est \n d\u2019utiliser un syst\u00e8me de repr\u00e9sentation \u00e0 deux chiffres",
"annot_obj": "1",
"annot_area": "",
"annot_date": "vendredi 25 juin 2010 10:38:19"
},
{
"id_annotation": "3",
"annot_doc_id": "page_de_test.html",
"annot_id_auteur": "2",
"anno_startOffset": "1",
"annot_startContainer": "ident-77",
"annot_endOffset": "146",
"annot_forme": "1",
"annot_value": "Dans un ordinateur, le dispositif qui permet de stocker de l\u2019information est donc \n rudimentaire, bien plus rudimentaire que les mains humaines.",
"annot_obj": "1",
"annot_area": "",
"annot_date": "vendredi 25 juin 2010 10:38:25"
},
{
"id_annotation": "4",
"annot_doc_id": "page_de_test.html",
"annot_id_auteur": "2",
"anno_startOffset": "107",
"annot_startContainer": "ident-77",
"annot_endOffset": "194",
"annot_forme": "1",
"annot_value": "crobaties avec ses doigts, mais \u00e9cartons ce cas). Avec un \n emplacement d\u2019information ",
"annot_obj": "1",
"annot_area": "",
"annot_date": "vendredi 25 juin 2010 10:38:33"
}
但问题是当我尝试通过使用此函数对此json响应进行循环时,该函数只会被执行一次,我想知道如何循环返回此返回的JSON
success: function(data) {
var mon_selection_2;
var mon_range;
resultText = eval(data);
var resultText_length = resultText.length;
for (var i=0; i<resultText_length; i++)
{
mon_selection_2 = window.getSelection();
mon_selection_2.removeAllRanges();
mon_range = document.createRange();
mon_selection_2.addRange(mon_range);
id_annotation_js = resultText[i].id_annotation;
anno_startOffset_js = resultText[i].anno_startOffset;
annot_startContainer_js = resultText[i].annot_startContainer;
annot_endOffset_js = resultText[i].annot_endOffset;
annot_value_js = resultText[i].annot_value;
annot_forme_js = resultText[i].annot_forme;
var start_Node = document.getElementById(annot_startContainer_js);
var textNode = start_Node.firstChild;
mon_range.setStart(textNode,anno_startOffset_js);
mon_range.setEnd(textNode,annot_endOffset_js);
var Gras_ele_js = document.createElement("span");
Gras_ele_js.setAttribute("style","color:black;font-size:14px;font-weight:bolder");
Gras_ele_js.setAttribute("value",mon_range);
Gras_ele_js.setAttribute("id",id_annotation_js);
mon_range.surroundContents(Gras_ele_js);
}
答案 0 :(得分:2)
好吧,这一行
resultText = eval(data);
将字符串转换为javascript对象。你不应该这样做(使用eval),即使它是所有方式中最快的,因为如果出于大规模的安全原因。
您应该使用jQuerys自己的实现$.parseJSON()
,或者,如果可用,浏览器集成JSON
解析器,如window.JSON.parse()
;
对于你的问题,你需要在这里循环一个对象。
$.each(resultText, function(i,v)){
$.each(v, function(index,value){
anno_startOffset_js = value.anno_startOffset;
// or anno_startOffset_js = value['anno_startOffset'];
});
};