0

我在网页上设置了以下代码(此时为私有):

function DoRequest(httpReq,url,param){

  httpReq.open("POST",url,false);
  httpReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  httpReq.send(param);
  httpReq.onreadystatechange = function() {
   if (httpReq.readyState==4) {alert(httpReq.responseText);}
  }

  if(httpReq.status==200){
    return httpReq.responseText;
  } else {
    return httpReq.status;
 }
}

当我通过它运行请求时,通过 pc 上的 firefox、safari,即 7-9、chrome 等,我得到 200 状态和正确返回的文本。

当我在我的 iphone 或 ipad 上运行相同的页面时,我的状态为 0,响应文本为空,以及来自正确响应文本后缀的回调函数的警报。在继续执行移动 safari 浏览器的代码之前,它似乎没有等待请​​求完成,是否有更好的强制它等待,或者我看不见的标志?

我也只在 safari 上获得了 onreadystate 回调,它在任何其他浏览器中都没有,我尝试删除该函数,以防它以某种方式触发它运行异步而不是没有但没有骰子它仍然运行异步尽管第三个参数为假。

我也只是尝试httpRq.open("POST",url);不使用第三个参数并且不使用 onreadystatechange 函数并且仍然运行异步。

url 是绝对路径。

4

1 回答 1

1

Mobile Safari 不支持同步使用 XMLHttpRequest(在您的代码中打开的第三个参数为 false,这是不受支持的)。

任何依赖于请求结果的东西都应该被移到回调函数中,并在你的 onreadystatechange 函数中调用,就在你有 alert() 调用的地方。

于 2013-01-14T20:17:04.563 回答