奇怪的JavaScript错误,由语法、Cytoscape Web或jQuery引起

奇怪的JavaScript错误,由语法、Cytoscape Web或jQuery引起,javascript,jquery,cytoscape-web,Javascript,Jquery,Cytoscape Web,我正在使用CytoscapeWeb编写一个小的web应用程序。它下载一个包含图形的XML文件,并显示它。我遇到了一个问题,它不会显示图形(而是显示一个空白图形),即使已知文件是健全的。在对代码进行了几天的搜索之后,我开始修改教程提供的示例代码来重现这个问题 此代码适用于: function get_network(filename) { var output = ""; $.ajax({url: filename, type: "GET", dataType: "text",

我正在使用CytoscapeWeb编写一个小的web应用程序。它下载一个包含图形的XML文件,并显示它。我遇到了一个问题,它不会显示图形(而是显示一个空白图形),即使已知文件是健全的。在对代码进行了几天的搜索之后,我开始修改教程提供的示例代码来重现这个问题

此代码适用于:

function get_network(filename)
{

    var output = "";

    $.ajax({url: filename, type: "GET", dataType: "text", success: function(result) { output = result; } });

    alert(filename);
    alert(output);

    return output;

}
而该代码不:

function get_network(filename)
{ 

    var output = "";

    $.ajax({url: filename, type: "GET", dataType: "text", success: function(result) { output = result; } });

    //alert(filename);
    //alert(output);

    return output;

}
唯一的区别是这两条alert()语句被注释掉了。仅删除第一条语句(警报(文件名);)时,警报框将显示空字符串。因此,看起来空白图是由输出变量没有正确设置的问题引起的。

我已经在Firefox和Internet Explorer中测试过了。如果有一条alert语句打印字符串“ASDFSADF”而不是输出变量,则该命令有效。然而,有趣的是,不使用alert()语句的代码,如'var junk=“ASDFSADF”'不起作用

因此,在我看来,有三种可能性:

  • 我犯了一些语法或逻辑错误,这使得解析的行数非常重要
  • Cytoscape Web以我无法想象的方式引发了这个问题
  • jQuery没有调用“success”函数
然而,我开始怀疑这个问题超出了我的专业知识范围,是由我没有考虑过的事情引起的

然而,我无法理解语法错误可能在哪里。我到处找。有没有人见过这样的事情,或者知道正在发生这样的事情

非常感谢你的帮助

完整代码:
XML文件:
在执行警报时未设置输出变量,因为AJAX调用是异步的(AJAX中的A表示异步)

AJAX调用完成后需要发生的任何事情都需要作为回调传递

因此,如果您的代码是这样的:

var graph = get_network(filename);
draw(graph);
您需要将get_网络更改为:

function get_network(filename,callback)
{ 

    var output = "";

    $.ajax({url: filename, type: "GET", dataType: "text", success: function(result) { 

    callback(result);
}
然后调用代码将是

get_network(filename,draw);

其中draw仍然是第一个示例中的函数,警报停止执行线程的时间足够长,以便响应返回。如果您的服务器花了10秒做出响应,而您在5秒后关闭了警报,那么它将无法工作

jQuery ajax函数不只是为了好玩而使用回调函数,而是因为执行是异步的,并且响应只保证在回调内部可用

在success回调函数中运行任何需要运行的代码,这些代码取决于响应


您已经使用
window.onload=function(){}
完成了这项操作,我怀疑该警报会阻止执行,给ajax留出时间来完成。Ajax是异步的。重新编写您的代码,以便
get\u network
获取回调函数,并将
output
交给Ajax
success
回调函数中的回调函数。感谢您的帮助,这将花费我很多时间!这段代码实际上来自教程,但我明白你的意思。我觉得很奇怪,它需要回调函数,谢谢你的澄清。