Ajax调用返回'错误' 20秒后

时间:2015-03-13 11:32:41

标签: javascript jquery ajax timeout

我尝试拨打服务器。数据的调用响应是数据库查询的结果。 查询很长(50秒)。从客户端调用开始20秒后,ajax在error函数完成:

$.ajax({
        type : "POST",
        contentType : 'text/plain;charset=UTF-8',
        dataType : 'json',
        data : p_jsonCall,
        url : 'my server....',

        cache : false,
        error : function(p_result) {
            ...
        },
        success : function(p_result) {

...

p_result

{
    "readyState": 0,
    "responseText": "",
    "status": 0,
    "statusText": "error"
}

如果我在ajax调用中添加timeout : 300000, //5 min作为参数我也遇到同样的问题。

P.S。简短查询(< 20s)管理得很好

p.p.s。我尝试使用外部客户端(Postman)运行http调用,它运行时没有错误!

4 个答案:

答案 0 :(得分:1)

问题#1:您的服务器端脚本不应该加载〜50秒。您在查询时遇到了问题。

问题#2:即使你在jQuery中设置了超时,也可能因为其他请求而提前超时。 (http://api.jquery.com/jquery.ajax/)。因此,修复客户端很困难,并且不是正确的解决方法。

粘贴一点服务器端代码,我也许可以提供帮助。

答案 1 :(得分:0)

这很可能是服务器方面的问题。服务器超时等待数据库完成查询。

编辑: 您可以尝试直接使用XMLHttpRequest对象,看看问题是否仍然存在

答案 2 :(得分:0)

也许你的php最大脚本时间超过了。尝试手动转到该页面。如果它显示正确那么一些错误是jquery。否则,Php或服务器端会出现一些错误。

顺便说一句,你应该在php.ini中检查它。 php.net说

  

如果达到此值,脚本将返回致命错误。默认限制为30秒,如果存在,则为php.ini中定义的max_execution_time值。

尝试:

set_time_limit(60);

在您编写脚本之前或编辑php.ini

答案 3 :(得分:0)

你必须写

 set_time_limit ( 300 );  // time in seconds (5 min.)

在ajax文件的顶部(正如您在代码my server....中提到的那样) 因为在服务器默认超时限制是30秒,你也必须增加它。

您可以在此处找到更多详细信息:http://php.net/manual/en/function.set-time-limit.php