我正在为AJAX请求添加自定义标头,以便服务器知道我的包装器应用程序的哪个版本正在发出请求。 要添加自定义标题,我有
$.ajaxSetup({
beforeSend: function (xhr) {
xhr.setRequestHeader('X-MyCustomHeader', 'Value');
}
});
我需要更改为服务器上的一个页面,其中包含一些帖子数据,我用
$.mobile.changePage("/Controller/PostAction", {
type: "post",
data: postData
});
但是,我最终导致加载错误和空白屏幕。
跟踪通过应用发送的网络请求会显示对服务器的请求最终为GET
而不是POST
如果没有自定义标题,changePage
调用就会完全正常工作。
有谁知道为什么添加自定义标题会破坏它?
答案 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