1

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

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

我需要更改到服务器上的一个页面,该页面需要一些发布数据,我用

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

但是,我最终遇到了加载错误和空白屏幕。跟踪通过应用程序发送的网络请求表明,对服务器的请求最终以 aGET而不是 aPOST

如果没有自定义标头,changePage调用将完全按其应有的方式工作。

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

4

1 回答 1

0

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

由于包装应用程序在 iOS 上运行,它使用 aUIWebView并实现了webView: shouldStartLoadWithRequest: navigationType:

如果当前请求没有自定义标头,我的实现是创建请求的副本并将标头添加到其中。然后它用它调用loadRequest:web 视图并取消当前请求。

我认为取消请求会干扰 jQuery MobilechangePage序列,导致它执行 aGET而不是POST.

我的解决方案是检查当前请求webView: shouldStartLoadWithRequest: navigationType:是否是一个NSMutableURLRequest,如果是,只需将标头添加到它并继续加载(在检查调试器时似乎就是这种情况)。当前请求仅在它不可变时才被替换。

我不确定这是否现在依赖于可能在未来版本的 iOS 中改变的东西。

那没有用,所以我现在正在使用自定义用户代理,如下所示:https ://stackoverflow.com/a/1368399/13570

于 2013-07-01T12:39:36.013 回答