如何修复/调试间歇性返回500错误的AJAX脚本

时间:2014-09-26 17:57:37

标签: javascript php jquery ajax

我有一个AJAX脚本,用于在我的网站上下订单后做一些数据库魔术。

以下是我在订单确认页面上的引用方式:

    <script>
// I define my function
    function voucherRedeem(str) {
      if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
      } else { // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
          document.getElementById("confirmation").innerHTML=xmlhttp.responseText;
        }
      }
      xmlhttp.open("GET","redeemvoucher.php?order="+str,true);
      xmlhttp.send();
    }

    // This grabs the order number in the confirmation field. 
    var finisher = jQuery('div.col-main p a:first').text();
    // This executes the function.
    voucherRedeem(finisher);
    </script>

我遇到脚本实际可行的情况,但我看到500.其他时间我看到500并且没有结果。最终,我不希望有任何500.这是一个拥有大量资源的登台服务器,因此我没有预见到网络或CPU问题。

我在Firebug中看到的错误:

GET http://www.website.com/redeemvoucher.php?order=123456 500 Internal Server Error 1.33s

我可以在这个JS函数或者document.ready上设置延迟吗?再一次,不太确定发生了什么。

2 个答案:

答案 0 :(得分:2)

我认为你的PHP有错误。

要抓住它,请尝试使用此功能(在redeemvoucher.php的顶部):

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    echo $errno."\n".$errstr."\n".$errfile."\n".$errline;
}

function myFatalErrorShutdownHandler() {
    $last_error = error_get_last();
    if ($last_error['type']===E_ERROR) {
        myErrorHandler(E_ERROR, $last_error['message'], $last_error['file'], $last_error['line']);
    }
}


set_error_handler('myErrorHandler');
register_shutdown_function('myFatalErrorShutdownHandler');

答案 1 :(得分:0)

不要依赖w3schools.com上的例子 - 他们被广泛认为是不可靠和维护不善的。相反,只需使用$.get来完成艰苦的工作:

$.get('redeemvoucher.php',{'order':str})
    .done(function(data) {
       /* code you put in here will run after the AJAX returns successfully */ 
    }).fail(function() {
       /* code you put in here will run after the PHP script returns an error */ 
    });

http://api.jquery.com/category/ajax