在我的 html5 模板(也使用 GAE 和数据存储/python)中,我正在对服务器进行异步 js 调用并返回更多类别,然后为用户提供结果/数据选择以触发另一个选择相同的异步调用方法。它第一次工作,但在第二次,它回来了一个语法错误。该调用甚至似乎都没有进入该方法(没有日志!),这是什么原因???对异步 js 方法的 2 次调用之间的唯一区别在于通过 url 传递的数据。传递了 3 个参数,其中 1 个参数用于形成服务器的 url 路由。在这两个调用中,对象键都是 url 的一部分。在第一个中,url 是通过 jinja 对象 {{item.key()}} 从原始模板渲染派生的。在第二个中,密钥派生自密钥,该密钥存储为从第一个传回的 json 字典中的值。也许这里发生了一些事情,因为它似乎甚至没有在第二次击中服务器?
catkey 第一次填充 jinja 对象键----: var html_output = ""; {% for item in cat_profession %}
var nameString = "{{item.name}}";
html_output += "<a href=\"javascript:getNextLevel(\'{{item.key()}}\',\'{{item.name}}\')\">" + nameString + "</a><br />";
{% endfor %}
但是第二次有效,我使用第一个结果生成类别以再次调用 json 以获得更多 for (var key in cat_JSON) { html_output += "" + key + "
";
cat_JSON[key] 是一个字符串——发生了一些奇怪的事情——但 url 的控制台日志似乎没问题,我没有看到任何证据表明它实际上正在到达服务器方法。上面的 JSON 将名称存储在键中,并将对象键存储为值。这是js函数:
function getNextLevel(catkey,catname) {
url = "/api/filter/" + catkey;
subjectAPI.open("GET", url, true);
console.log("url is ", url);
subjectAPI.onload = function() {
var cat_JSON = JSON.parse(this.responseText);
var html_output = "";
for (var key in cat_JSON)
{
html_output += "<a href=\"javascript:getNextLevel(\'" + cat_JSON[key] + "\',\'" + key + "\'," + ")\">" + key + "</a><br />";
}
$(#col).append(html_output);
}
subjectAPI.send();
}