我的ajax有什么问题?它只是不起作用

时间:2013-11-23 10:31:57

标签: php ajax timeout

我不知道什么是简单的ajax请求拒绝运行正常的问题,我在不同的托管上测试它同样的问题。任何想法?

o.php

<html>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
function ksearch(){
var dataString = $("#areax").val();
$.ajax({
           type: "POST",
           url: "csv.php",
           data: {html: dataString},
           success: function(data)
           {
        $("#update_div").html(data);
           }
         }); // end ajax
}// end function
</script>
<textarea id="areax"></textarea>
<button type="button" onclick="ksearch();" >Submit</button>
<div id="update_div"></div>
</body>
</html>

csv.php

<?php
$str = $_POST['html'];
sleep(40);
echo $str;
?>

所有萤火虫详细信息都贴在这里 http://pho.to/4BLeG

修改1

脚本从任何连接都运行得很好,有些客户端只有慢速连接才会遇到这个问题。

修改2

成功回调30秒后返回空响应标记,虽然最大执行时间和设置时间限制在php.ini中设置为无限制,安全模式关闭甚至php sleep()不计入执行时间..如果睡眠时间低于30秒,脚本在慢速连接上运行正常

编辑3

链接phpinfo

http://69.50.252.196/php.php

@Damiano Barbati它不起作用, @Deryck它不起作用 谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

更改为:

<?php
var_dump($_POST);
?>

然后在炮弹内射击:

curl -d "first=1&second=2" "http://69.50.252.196/csv.php"

输出是什么?

编辑:

我得到以下内容:

<html>
<head><title>504 Gateway Time-out</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Time-out</h1></center>
<hr><center>nginx/0.7.65</center>
</body>
</html>

问题与php_time_limit无关,但与php-fpm时间限制有关,请按照此类指南进行修复。

http://rtcamp.com/tutorials/php/increase-script-execution-time/

答案 1 :(得分:0)

首先,这两个(分别是Firefox 25和Chrome 31)可以连续尝试:

Firefox 25 Chrome 31

这不奇怪,我敢肯定。你开始看到错误的地方是当你将另一个连接与你的sleep()函数混合时(由于某种原因,它会持续40秒)。 sleep()将完全占用该过程,直到收到中断信号或完成其时间。这意味着如果一个人在40秒完成之前尝试尝试同样的事情,除非他们在计时器达到20秒之前发送请求,否则他们将无法获得任何回复(基于我的浏览器在60秒时获得504超时的演绎推理) )。

也许你打算这个,也许不是。无论哪种方式,请阅读下面的方法来操作它以更好地为您工作。以下内容不会再缩短等待时间,但会导致数据响应(顺便提一下,您应该在dataType: "text"函数中设置为$.ajax()以节省带宽和处理时间。如果你想切入函数并中断sleep()(或者只是允许中间的另一次执行并继续运行睡眠定时器),你可以使用this example

如果没有关于服务器设置的详细信息(PHP,nginx特定设置),我只能指向PHP sleep() page504 Gateway Timeout Tips for nginx

基本上,您需要在配置文件中使用这些设置:

<强>的php.ini

max_execution_time = 300

/etc/php-fpm.d/www.conf - (仅当先前使用的变量需要更改时 - 否则默认情况下将采用max_exec_time的值)

request_terminate_timeout = 300

nginx主机配置文件

location ~ \.php$ {
  fastcgi_pass unix:/tmp/php5-fpm.sock;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
  fastcgi_read_timeout 300;
}

最后一个的主要变化是fastcgi_read_timeout=300;

输入后我还看了@Damiano Barbati的回复,他链接到的网站基本上是相同的信息。如果您仍有问题,请放置一个我们可以访问的info.php文件(确保您的php.ini文件中没有密码等)并将此代码放入其中:

<? phpinfo(); ?>
祝你好运!