我对AJAX请求有一个小问题。
我们有一个小的PHP,JavaScript应用程序(网站)。应用程序在所有桌面浏览器上运行良好+在我们的旧MDE(某些Windows CE6 MDE)上运行。现在我们的新款摩托罗拉MC9200(以前是CE7的Windows Embedded Compact 7)已不再适用了。
问题是一些小的JavaScript功能。它禁用按钮/输入字段,启动Ajax.Request(原型1.72,但我也测试了jQuery 1.11.1),在数据库上做了一些事情,当一切正常时,它通过window.location刷新网站。此功能始终不在新设备上运行。有时它会,有时不会。
简化代码:
function loadSite(siteName) {
disableForm();
var parameters = {
/* SOME PARAMETERS */
};
new Ajax.Request('ajax/ajax_db_execute.php', {
method: 'post',
parameters: parameters,
onSuccess: callbackFunc
});
}
function callbackFunc(transport) {
response = transport.responseText.evalJSON(true);
if(response.retcode === 0) {
window.location = "start.php?id=<?php echo $id; ?>";
} else {
show_error_box(response.errortext);
enableForm();
}
}
我试图在callbackFunc中输出响应但是该函数甚至没有被调用。我尝试的下一件事是在loadSite函数的末尾添加一些警报,它每次都被触发。我已经检查了参数,它们看起来也很好。
之后我在php文件中放了一些简单的fwrite。看起来有时甚至不会调用该文件。所以问题是为什么?
将方法更改为&#39; get&#39;我无法重现问题,一切正常。问题是我不想使用get +某些参数可能太长而无法处理。
该示例中的参数只是一些简单的整数和字符串。有没有人知道可能导致问题的原因和一些解决方法?
答案 0 :(得分:-2)
您的帖子请求响应似乎未同步。所以请在你的回调中使用setTimeout函数,就像那样
setTimeout(function(transport) {
response = transport.responseText.evalJSON(true);
if(response.retcode === 0) {
window.location = "start.php?id=<?php echo $id; ?>";
}
else
{
show_error_box(response.errortext);
enableForm();
}
}, 3000);