2010-12-07 151 views
1

我正在开发ajax调用的应用程序,并且我遇到了一些相当特殊的行为,有时当ajax调用被触发时,它会自我复制,第二个完成但我没有响应回来和原来的一直持续加载这是固定的时候再次发起ajax调用或当我刷新。jquery ajax调用响应永不返回

问题是我不能再现这种行为,因为它发生随机。大多数情况下,当选项卡处于打开状态时,我处于不同的选项卡或程序中。

我注意到使用萤火虫的唯一情况是响应标题似乎有些问题。

相比成功的通话,他们是在一个不同的顺序和一些信息完全丢失。 Content-Type总是比我在$.ajaxSetup中定义的text/html更多。

$.ajaxSetup({ 
    dataType:'html', 
    cache:false, 
    type:'POST', 
    timeout:15000, 
    error:function() { 
    alert('Action aborted please try again'); 
    }, 
    complete:function(XMLHttpRequest,textStatus){ 
    //console.log('XMLHttpRequest.readyState : '+XMLHttpRequest.readyState+'\nXMLHttpRequest.statusText : '+XMLHttpRequest.statusText+'\nXMLHttpRequest.status : '+XMLHttpRequest.status+'\ntextStatus : '+textStatus); 
    } 
}); 

和我的Ajax调用的一个例子:

var dataString = 'value='+value+'&value1='+value1+'&value2='+value2; 
    $.ajax({ 
    url:'file.php', 
    data:dataString, 
    success:function(resp){ 
     alert(resp); 

    } 
    }) 

这种行为往往发生了很多我添加了一个dataType,也是一个winXP的SP3本地机器上查看时它正在发生更加频繁之前使用XAMPP,我认为既Firefox和IE。

我已经在运行Windows Server 2008和Apache和PHP独立版的服务器上进行了测试,而不是xampp,这种情况发生得更少。 形成我的家用电脑它几乎从来没有发生上述测试是在我的办公室电脑。

有没有人遇到过类似的行为类型,或者有没有办法以不同的方式编写我的ajax调用。

我想避免使用插件和长时间轮询在apache服务器上似乎有点沉重。

回答

0

你使用jquery ajax调用的方式在技术上是正确的。我会建议的一个建议是不要像手动那样手动构建数据字符串。您可以将对象文字传递给数据参数,并让jquery为您进行字符串转换。这有一个让jquery执行正确转义的附加好处,有时候会混淆XMLHttpRequest 除此之外,我建议使用firebug的console.trace()命令来查看是否实际进行了两个.ajax调用以及为什么。有一个'beforeSend'侦听器,你可以在你的ajaxSetup中设置 - 可能是一个放置它的好地方。

0

你的意思是这样的:

var dataString= { 
    value: value, 
    value1: value1 
}; 

我几乎可以肯定确保只有一次一个呼叫火灾,但随后如果花费的时间太长,复制自身并继续加载,直到永远。

我从萤火虫附截图:

Firebug

+0

这就像原来的请求无法完成,而是即时得到这是从来没有实际请求的响应 – alex 2010-12-07 12:54:43