Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过POST的Ajax调用不起作用_Javascript_Jquery_Ajax_Post_Prototypejs - Fatal编程技术网

Javascript 通过POST的Ajax调用不起作用

Javascript 通过POST的Ajax调用不起作用,javascript,jquery,ajax,post,prototypejs,Javascript,Jquery,Ajax,Post,Prototypejs,我对AJAX请求有一个lil问题 我们有一个lil PHP、JavaScript应用程序(网站)。该应用程序在所有桌面浏览器上运行良好+在我们的旧MDE(一些Windows CE6 MDE)上运行良好。现在,在我们新的摩托罗拉MC9200(Windows嵌入式Compact 7,前身为CE7)上,它不再工作了 问题在于一些小的JavaScript函数。它禁用按钮/输入字段,启动Ajax.Request(原型1.72,但我也测试了jQuery 1.11.1),在数据库上执行一些操作,当一切正常时,

我对AJAX请求有一个lil问题

我们有一个lil PHP、JavaScript应用程序(网站)。该应用程序在所有桌面浏览器上运行良好+在我们的旧MDE(一些Windows CE6 MDE)上运行良好。现在,在我们新的摩托罗拉MC9200(Windows嵌入式Compact 7,前身为CE7)上,它不再工作了

问题在于一些小的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();
  }
}
函数加载站点(siteName){
禁用形式();
变量参数={
/*一些参数*/
};
新的Ajax.Request('Ajax/Ajax\u db\u execute.php'{
方法:“post”,
参数:参数,
onSuccess:callbackFunc
});
}
函数callbackFunc(传输){
response=transport.responseText.evalJSON(true);
如果(response.retcode==0){
window.location=“start.php?id=”;
}否则{
显示错误框(response.errortext);
enableForm();
}
}
我试图在callbackFunc中输出响应,但该函数甚至没有被调用。接下来我尝试在loadSite函数的末尾添加一些警报,每次都会触发。我已经检查了参数,它们看起来也很好

之后,我在php文件中添加了一些简单的fwrite。看起来这个文件有时甚至没有被调用。所以问题是为什么

通过将方法更改为“get”,我无法重现问题,并且一切正常。问题是我不想使用get+某些参数可能太长,get无法处理


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

您的post请求响应似乎没有同步。所以,请像这样在post回调中使用setTimeout函数

setTimeout(函数(传输){
response=transport.responseText.evalJSON(true);
如果(response.retcode==0){
window.location=“start.php?id=”;
} 
其他的
{
显示错误框(response.errortext);
enableForm();
}

}, 3000);

在Firefox中使用firebug或chrome按f12打开开发者工具或firebug。检查控制台是否有错误,它应该显示所有xhr请求,并且没有错误。正如我所说,它在任何其他浏览器中运行时都不会出现任何问题。在DOM就绪后,是否调用
loadSite()
document.observe('dom:loaded',function(){})
在PrototypeJS和
$(document.ready(function(){})
在jQueryI中我没有使用
document.observe('dom:loaded')
,明天会尝试,但我很确定dom已经准备好了。这是一个小网站(菜单),上面有4-5个按钮,仅此而已,而且不像我在页面加载过程中滥发按钮,但我会尝试一下
dom:loaded
。我仍然想知道为什么只有在使用POST及其与GET一起使用时才会出现此问题。只需尝试
document。观察
。没有帮助。我在函数中将一个标志
ready
设置为true,并在
loadSite
函数中显示该标志,它已经准备好了,即使站点更改不起作用。回调的全部目的是避免这种情况
callbackFunc
仅在请求成功时调用。将其包装为超时是错误的。