0

在我的 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();
 }              
4

1 回答 1

0

我认为您应该提供更多代码来制作第一个 ajax 和第二个 ajax,以便我们更多地了解您的问题。根据提供的当前信息,我您连续执行 2 个 ajax 请求,这可能是问题所在,因为 ajax 请求是异步的。当您执行第二个请求时,第一个请求的响应可能尚未到达。

根据更新的问题更新:

问题是这一行,最后有一个多余的,字符

"javascript:getNextLevel(\'" + cat_JSON[key] + "\',\'" + key + "\'," + ")\">"

它应该是:

"javascript:getNextLevel(\'" + cat_JSON[key] + "\',\'" + key  + "\')\">"
于 2013-08-18T03:14:17.790 回答