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

Bizarre JavaScript bug, caused either by syntax, Cytoscape Web, or jQuery

本文关键字:Cytoscape Web 引起 jQuery 语法 JavaScript 错误      更新时间:2023-09-26

我正在使用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中对此进行了测试。如果有一个警报语句打印字符串"ASDFSADF"而不是输出变量,则它有效。然而,有趣的是,不使用 alert() 语句的代码(例如 'var junk = "ASDFSADF")不起作用。

所以在我看来有三种可能性:

  • 我犯了某种语法或逻辑错误,这使得解析的行数很重要
  • Cytoscape Web正在以我无法想象的方式引起问题
  • jQuery没有调用"成功"函数
然而,我

开始怀疑这个问题超出了我的专业知识,并且是由我没有考虑过的事情引起的。

然而,语法错误可能在哪里超出了我的范围。我搜索了高低。有没有人看到这样的事情,或者知道正在发生?

非常感谢您的帮助。

完整代码:
http://pastebin.com/rvcV3LFLXML 文件:http://pastebin.com/HCyuKQnx

执行

警报时未设置输出变量,因为 AJAX 调用是异步的(AJAX 中的 A 用于异步)。

在 AJAX 调用完成后需要执行的任何操作都需要作为回调传递。

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

var graph = get_network(filename);
draw(graph);

您需要将get_network更改为:

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 函数采用回调函数不仅仅是

为了好玩而使代码更丑陋,它采用回调函数是因为执行是异步的,并且响应仅保证在回调中可用。

在成功回调函数中运行需要运行的任何代码,具体取决于响应。

您已经使用 window.onload = function(){}