Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
jquery-ajax与async-false挂起firefox_Jquery_Ajax_Firefox_Asynchronous - Fatal编程技术网

jquery-ajax与async-false挂起firefox

jquery-ajax与async-false挂起firefox,jquery,ajax,firefox,asynchronous,Jquery,Ajax,Firefox,Asynchronous,我有一个调用$.ajax的代码,如下所示: $.ajax({ type: "POST", url: "/sandbox/graphloader/mock3", async: false, data: {calInput1:dates[0], calInput2:dates[1]},

我有一个调用$.ajax的代码,如下所示:

$.ajax({

                        type: "POST",
                        url: "/sandbox/graphloader/mock3",
                        async: false,
                        data: {calInput1:dates[0], calInput2:dates[1]},
                        success: function(data){
                            data=eval(data);
                            for(var x in data[0]){
                                //alert(data[0][x]);
                                //fill columns here;
                            }

                            fillPercents(column);
                        }});
现在,除了Firefox之外,这在所有浏览器中都可以使用。firebug显示它正在从post获得回复,但由于一些未知错误,它没有显示数据。
可能有什么问题?

这种行为是故意的

切勿使用
async:false


由于Javascript在UI线程上运行,因此
async:false
请求将冻结浏览器,直到服务器答复。

您的
全局可能会被以前的AJAX请求覆盖

尝试在回调中将其设置为局部变量,并尝试添加
console.log
调用,以确保回调顺序符合预期


您可能需要保留一个全局请求计数器,以确保在发送新请求后不会处理响应

例如:

var lastRequest = 0;   //You may want to put this in a namespace or closure

...

var thisRequest = ++lastRequest;
$.ajax({
    type: "POST",
    url: "/sandbox/graphloader/mock3",
    async: false,
    data: {calInput1:dates[0], calInput2:dates[1]},
    success: function(data){
        if (thisRequest !== lastRequest) return;
        ...
    }});
不要在循环体中执行此操作,否则将共享
thisRequest
变量。

相反,从循环体调用函数。

它处于冻结状态,因为它没有得到“成功”响应,而且您还没有处理错误。在设置中设置一个
error:function(jqXHR、textStatus、errorshown){}
来处理错误响应
async:false
工作正常。

问题是firefox从未完成加载。我使用jquery ui来显示用ajax返回的数据填充的列,这些数据永远不会填充。如果在回调开始时调用
console.log
alert
会发生什么?您在Firebug中看到任何错误吗?ajax调用返回的数据类型是什么(即json、xml、html等)。。。你能给我一个样品吗。。。您的评估功能是否成功返回?警报响应。它只是没有填满数据。看起来它还挂着。。firebug中没有错误。在将async:false放入之前,数据已正确表示。传递的数据是来自php的json,这是一个多维数组。“直到服务器回复”是可以的。让它冻结。但是一旦服务器回复,它应该是正常的,对吗?不,不要让它冻结。这是最可靠的(好的,几乎是最可靠的)方法,可以让用户远离你的网站。。。好的,那我有一个新问题。在用户更改列上的日期后,我的ajax调用应该用来自服务器的数据填充4列。然后是对这些新数据的计算。我还将计算部分放在jquery的ajax调用的“success”函数中。但这些计算“有时”是根据旧数据进行的。我可以避免吗?您可能在服务器回复之前运行它们。你能展示你的代码吗?@Shrinath:传递函数要快得多。不要指望W3Coohls提供最佳实践。