通过POST调用Ajax无法正常工作

时间:2014-07-23 13:58:12

标签: javascript jquery ajax post prototypejs

我对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 +某些参数可能太长而无法处理。

该示例中的参数只是一些简单的整数和字符串。有没有人知道可能导致问题的原因和一些解决方法?

1 个答案:

答案 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);