在使用javascript的网页中,我使用
将数据传递到隐藏的输入字段$("#waypt_sel").val(JSON.stringify(itins.arr_intin));
然后使用
访问该数据waypts_input = $.parseJSON($("#waypt_sel").val())
这有效,除了有时它给出了
未捕获的SyntaxError:意外的输入结束
。我用json解析跟踪了这一行的错误。但我感到困惑,因为这有时会起作用,但有时它并不适用于同一个相同的字符串。
我检查了传递给html输入的值,它可以工作,但不适用于相同的值。 这是我传递的json字符串的一个例子:
"[{\"location\":\"8.3353156, 80.3329846\",\"stopover\":true}, {\"location\":\"8.0326424, 80.7446666\",\"stopover\":true}, {\"location\":\"7.9577778, 80.667518\",\"stopover\":true}, {\"location\":\"7.953208, 81.006675\",\"stopover\":true}, {\"location\":\"7.885949, 80.651479\",\"stopover\":true},{\"location\":\"7.2905425, 80.5986581\",\"stopover\":true},{\"location\":\"7.300322, 80.386362\",\"stopover\":true}]"
这是我使用的代码的结构。
$(document).ready(function() {
$.ajax({
url: "aa.php",
type: "POST",
data: {
id: selected_i
},
success: function(result) {
itins = $.parseJSON(result);
$("#waypt_sel").val(JSON.stringify(itins.arr_intin));
}
});
$.ajax({
type: "POST",
contentType: "application/json",
url: "dd.php",
success: function(result) {
locations = $.parseJSON(result);
initializeMap();
}
});
function initializeMap() {
//other code
calculateAndDisplayRoute();
//other code
function calculateAndDisplayRoute() {
//other code
waypts_input = $.parseJSON($("#waypt_sel").val());
waypts_json_input = $.parseJSON(waypts_input);
//other code
}
}
});
以下是我在firefox开发人员版浏览器上收到的详细错误消息。
SyntaxError:JSON.parse:第1行第1列的意外数据结尾 JSON数据
calculateAndDisplayRoute()map.js:366
initializeMap()map.js:290
.success()map.js:62
m.Callbacks / j()jquery-1.11.3.min.js:2
m.Callbacks / k.fireWith()jquery-1.11.3.min.js:2
x()jquery-1.11.3.min.js:5
.send / b()jquery-1.11.3.min.js:5
提前致谢。
答案 0 :(得分:0)
" \"在javascript中反序列化json字符串时是不必要的。
您使用的json工具是什么?
你在一个工具中序列化,并与其他工具反序列化,可能会得到这个场景。
答案 1 :(得分:0)
问题是我使用异步ajax请求来检索json数据。当数据被检索并粘贴到html时,使用html数据的代码的执行发生了,因此给出了错误。我为ajax查询使用了一个回调函数,这就完成了这项工作。
function get_det(callback) {//Your asynchronous request.
$.ajax({
url: "aa.php",
type: "POST",
success: function (result) {
alert("1st call");
callback();//invoke when get response
}
});
}
并在调用它的代码中:
get_det(secondFunction);//calling with callback function
function secondFunction()//your callback function
{
alert("2nd Call");
}
或者,您也可以在ajax查询参数中尝试async: false
。但这可能导致浏览器冻结,不建议使用。