向AJAX请求添加标头会阻止jqm changePage执行POST

时间:2013-06-28 14:36:09

标签: jquery ios jquery-mobile

我正在为AJAX请求添加自定义标头,以便服务器知道我的包装器应用程序的哪个版本正在发出请求。 要添加自定义标题,我有

$.ajaxSetup({
  beforeSend: function (xhr) {
    xhr.setRequestHeader('X-MyCustomHeader', 'Value');
  }
});

我需要更改为服务器上的一个页面,其中包含一些帖子数据,我用

$.mobile.changePage("/Controller/PostAction", {
  type: "post",
  data: postData
});

但是,我最终导致加载错误和空白屏幕。 跟踪通过应用发送的网络请求会显示对服务器的请求最终为GET而不是POST

如果没有自定义标题,changePage调用就会完全正常工作。

有谁知道为什么添加自定义标题会破坏它?

1 个答案:

答案 0 :(得分:0)

事实证明,这涉及到其他一些逻辑。也就是说,包装器应用程序中的代码确保非AJAX请求存在自定义标头。

当包装器应用程序在iOS上运行时,它使用的是UIWebView并且具有webView: shouldStartLoadWithRequest: navigationType:的实现

如果当前请求没有自定义标头,我的实现就是创建请求的副本并向其添加标头。然后,它使用它在Web视图上调用loadRequest:并取消当前请求。

我认为取消请求会干扰jQuery Mobile changePage序列,导致它执行GET而不是POST

我的解决方案是检查webView: shouldStartLoadWithRequest: navigationType:中的当前请求是否为NSMutableURLRequest,如果是,只需添加标题并继续加载(这在检查时似乎是这种情况)在调试器中)。如果当前请求不可变,则仅替换当前请求。

我不确定现在是否依赖于未来版本的iOS中可能会发生变化的事情。

这不起作用,所以我现在正在使用自定义用户代理,如下所示:https://stackoverflow.com/a/1368399/13570