传递回调值时函数似乎中断,即使回调返回ok

时间:2015-03-01 01:46:54

标签: javascript jquery ajax

我正在为一所学校编写一本(非商业性)图书编目网页应用程序,有关这些图书的数据来自两个不同的来源:Google Books和Openlibrary.org。谷歌更可靠,所以我只依赖Openlibrary来制作图书馆式的主题标题,谷歌不提供这些标题。

我使用$.getJSON从Google的api获取书籍的ISBN,我在其中回调$.get,其中调用使用curl的PHP脚本来绕过跨域规则并使用Google获取的ISBN作为参数调用Openlibrary api。此$.get将结果从Openlibrary传递到名为printboxes(result)的回调,该回调使用来自Google和OpenLibrary的数据一起打印一些预先填充的HTML表单字段,然后可以使用这些字段提交到数据库。声音比它需要的更复杂?也许是。

这个页面的结构是一个搜索表单,可以一次搜索多个书籍(通常通过他们的isbns扫描),制作一种具有嵌套数组名称结构的超级表格,然后他们都可以立即提交。最初,我在.append内有一个单独的主要<div>个书箱<form>。然后我决定要进行搜索.prepend,这样无论上一本书扫描的是什么,它都会出现在表格的顶部,这样你就可以立刻看到它并确保一切都是犹太人的。这样做没问题,但是如果这个人选择了他们想要每次搜索多个结果,那么每个搜索结果将叠加54321,而不是12345.我想要的是搜索在页面上堆叠54321,但是在每个搜索中搜索,结果应该显示为12345.因此,每次搜索时,我都会在主表单中<div id=\"searchcount\""+scount+">引发另一个.prepend,然后我.append将每个结果编辑为{{1} }。这证明了一个步骤太过分了,$('#searchcount'+scount)回调中断了。

检查网络活动显示所有printboxes(result)都返回了准确的结果。如果我在最后一次回调OpenLibrary之前拨打$.get,只是传递一个手动值以及它从Google获得的内容,它可以正常运行,printboxes s,.append和所有。如果我在回调OpenLibrary中调用.prepend,那就有效。如果我将一个DOM元素变浅,即返回跳过alert(result)每个搜索div的配置,并将结果打印在他们自己的div中,它就可以工作。

但是当它出现时:

.prepend

它完全没有了。我从控制台的唯一提示是,为什么当if语句检查第一个搜索结果的框时,它会抱怨function printboxes(sub) { var subjects = sub; //subjects represents the return string from the curl request to Openlibrary $('#searchcount'+scount).append("<div class=\"resultbox\" id=\"results"+scount+''+i+"\">"+(i+1)+".</div>") .append("Title: <input class=volumevalue size=50 type=text name=\"volumeinfo["+scount+"]["+i+"][booktitle]\" readonly='readonly' value=\"" + btitle + "\" /><br>") .append("Author: <input class=volumevalue size=50 type=text name=\"volumeinfo["+scount+"]["+i+"][bookauthor]\" value=\"" + bauthor + "\" /><br>") .append("Subjects: <input name =\"volumeinfo["+scount+"]["+i+"][subjects]\" type='text' size=100 value = \""+subjects+"\" /></br>"); //I realize these element names are outrageous, but they're necessary for parsing the form later. if (i===0) { //This if statement automatically selects the first result of a given search for insertion in the database. document.getElementsByName("volumeinfo["+scount+"][0]['checker']")[0].setAttribute('checked','true'); } //this recursive function down here is necessary because looping structures wouldn't sync with ajax calls. It loops over the results from Google books, parsing the JSON as it goes for use here populating most of the values in printboxes. geterator(i+i, countdown-1, stack); } $.get('./subcurl.php', {bookkey: isbn}, function(result){ //Get subjects with curl from openlibrary and pass the result to printboxes. printboxes(result); });//end curl request } 未定义,因此无法设置其属性。如果我注释掉document.getElementsByName("volumeinfo[0][0]['checker']")[0]语句,那么我从控制台中得不到这样的错误,并且网络请求通过正常,但是DOM停止追加if,并且没有任何结果显示在页。同样,如果我将一个DOM元素变浅,一切正常(即没有'searchcount'div,只有一个大div用于所有结果)。如果我在回调之外使用带有硬编码参数的<div id = "searchcount0">,它也可以正常工作,但似乎我不能同时使用两个div,并且还具有正确的回调函数。

帮助我StackObiwan,你是我唯一的希望。

0 个答案:

没有答案