Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 网络工作者在webkit中的行为与Firefox不同_Javascript_Firefox_Google Chrome_Webkit - Fatal编程技术网

Javascript 网络工作者在webkit中的行为与Firefox不同

Javascript 网络工作者在webkit中的行为与Firefox不同,javascript,firefox,google-chrome,webkit,Javascript,Firefox,Google Chrome,Webkit,我有一个web应用程序,可以在基于webkit的现代浏览器中正常工作()。基本上,它使用webworker从服务器获取数据,然后在执行一些计算后将数据发送回服务器 它在Chrome/Safari中工作得很好(控制台中没有错误),但当我尝试在Firefox中使用它时,它就不行了。我推断Firefox中的变量“迭代次数”设置不正确。不幸的是,Firefox缺少一个调试器(用于web工作人员),javascript具有功能范围,因此很难找出问题所在。我已经为我的网络工作者发布了javascript代码

我有一个web应用程序,可以在基于webkit的现代浏览器中正常工作()。基本上,它使用webworker从服务器获取数据,然后在执行一些计算后将数据发送回服务器


它在Chrome/Safari中工作得很好(控制台中没有错误),但当我尝试在Firefox中使用它时,它就不行了。我推断Firefox中的变量“迭代次数”设置不正确。不幸的是,Firefox缺少一个调试器(用于web工作人员),javascript具有功能范围,因此很难找出问题所在。我已经为我的网络工作者发布了javascript代码,我想知道是否有人能指出我的错误:

importScripts('/static/js/mylibs/jquery.hive.pollen-mod.js');


$(function (data) {
    main();
    //while(main());
    close();
});

function main() {
    //make an ajax call to get a param
    var iterations//value will be set by server response
    var key//key of the datastore object
    var continueloop = true;
    p.ajax.post({
        url:'/getdataurl',
        dataType: "json",
        success: function(responseText){
            if (responseText === null) {
                var workermessage = {
                    "log":"responseText is null. Either the server has issues or we have run out of stuff to compute."
                };
                $.send(workermessage);
                continueloop = false;
            }
            iterations = responseText.iterationsjob;
            key = responseText.key;      
        }
    });

    if (continueloop === false) {
        return false;
    }

//here is where I think the problems begin. In chrome/safari, iterations = 1000. 
//In Firefox however, iterations = null. As a result, everything after that does not work.

    var i,x,y,z;
    var count = 0;
    var pi;
    start = new Date();
    for (i=0;i<iterations;i++) {
        x = Math.random();
        y = Math.random();
        z = x*x+y*y;
        if(z<=1.0){
            count++;
        }
    }//end for loop
    pi = count/(iterations)*4.0;
    end = new Date();
    result = {
        "estimated_pi":pi,
        "num_iter":iterations,
        "duration_ms":end.valueOf()-start.valueOf(),
        "key":key
    };
    //send results to the server
    p.ajax.post({
        url: "/resultshandler",
        dataType:'json',
        data: result,
        success: function()
        {
            //do nothing!
        }
    });
    $.send(result);
    return true;//persists the loop
}
importScripts('/static/js/mylibs/jquery.hive.pool mod.js');
$(函数(数据){
main();
//while(main());
close();
});
函数main(){
//进行ajax调用以获取参数
var迭代次数//值将由服务器响应设置
var key//datastore对象的key
var continueloop=true;
p、 ajax.post({
url:“/getdataurl”,
数据类型:“json”,
成功:函数(responseText){
if(responseText==null){
var workermessage={
“log”:“responseText为空。要么是服务器出现问题,要么是我们的计算资源不足。”
};
$.send(workermessage);
continueloop=false;
}
迭代=responseText.IterationJob;
key=responseText.key;
}
});
if(continueloop==false){
返回false;
}
//我认为问题就从这里开始。在chrome/safari中,迭代次数=1000。
//然而,在Firefox中,迭代次数=null。因此,之后的一切都不起作用。
变量i,x,y,z;
var计数=0;
var-pi;
开始=新日期();

对于(i=0;i您正在执行一个异步XHR,然后立即执行一个循环,尝试使用其结果。我不知道为什么这可能在Chrome中起作用,但它确实很活泼。您是否尝试过在post选项中传递“sync:true”

编辑:哦,没关系。我明白你的代码为什么会起作用了。hive.poren脚本有以下精彩之处:

sync: navigator.userAgent.toLowerCase().indexOf('safari/') != -1 ? false : true,
因此,默认情况下,它在Chrome/Safari中执行同步XHR,在其他所有内容中执行异步XHR(因为它将
options.sync
作为
async
参数的值传递给
XMLHttpRequest.open
,这是向后的,但不管怎样;它确实意味着您实际上需要在调用站点传递
sync:false
,以获得同步行为)。由于您没有指定要同步还是异步,所以在Chrome中获得同步,在Firefox中获得异步

哦,剧本在那一行之前有这样一段精彩的评论:

//  TODO: FIX THIS.

你正在做一个异步XHR,然后立即做一个循环,试图使用它的结果。我不知道为什么这可能在Chrome中起作用,但它确实很活泼。你是否尝试过在你的帖子选项中传递“sync:true”

编辑:哦,没关系。我明白你的代码为什么会起作用了。hive.poren脚本有以下精彩之处:

sync: navigator.userAgent.toLowerCase().indexOf('safari/') != -1 ? false : true,
因此,默认情况下,它在Chrome/Safari中执行同步XHR,在其他所有内容中执行异步XHR(因为它将
options.sync
作为
async
参数的值传递给
XMLHttpRequest.open
,这是向后的,但不管怎样;它确实意味着您实际上需要在调用站点传递
sync:false
,以获得同步行为)。由于您没有指定要同步还是异步,所以在Chrome中获得同步,在Firefox中获得异步

哦,剧本在那一行之前有这样一段精彩的评论:

//  TODO: FIX THIS.

“不幸的是,Firefox缺少调试器”你试过了吗?在
var iterations
var key
的注释之前,在变量名后面加一个分号有区别吗?你的
p.ajax.post
函数是异步的还是同步的ajax?如果是异步的,那么
iterations
将只在成功处理程序中设置,而不是在你想做的地方g因为ajax调用尚未完成,所以尚未设置
iterations
。调用异步ajax调用只是启动操作,然后javascript继续执行。直到稍后成功处理程序运行时,才会完成。异步javascript可能有问题,但它可以正常工作在Chrome中非常完美,在Firefox中只有一半。如果这是一个异步问题,我会认为结果会是一样的……我认为这与Firefox webworkers中的作用域实现有关。正如我在之前的评论中所说,如果有人对接管该项目感兴趣,只要说出来,我就会让你成为该项目的合作者repo.“不幸的是,Firefox缺少调试器”你试过了吗?在
var iterations
var key
的注释之前,在变量名后面加一个分号有区别吗?你的
p.ajax.post
函数是异步的还是同步的ajax?如果是异步的,那么
iterations
将只在成功处理程序中设置,而不是在你想做的地方g因为ajax调用尚未完成,所以尚未设置
iterations
。调用异步ajax调用只是启动操作,然后javascript继续执行。直到稍后成功处理程序运行时,才会完成。异步javascript可能有问题,但它可以正常工作在Chrome中非常完美,在Firefox中只有一半。如果这是一个异步问题,我会认为结果会是一样的……我认为这与Firefox webworkers中的作用域实现有关。正如我在之前的评论中所说,如果有人对接管该项目感兴趣,只要说出来,我就会让你成为该项目的合作者repo.Thank!我注释掉了sync:navigator.userAgent行,并将其替换为sync:false。Firefox现在就像一个符咒一样工作。*或者,