我有一个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上设置延迟吗?再一次,不太确定发生了什么。
答案 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 */
});