我有一张表格:
<form id="orderForm" onsubmit="return prepareOrder(this);" action='@ConfigurationManager.AppSettings["EpayLogonUrl"]' method="POST">
<input type="hidden" name="Signed_Order_B64" value="">
<input type="hidden" name="email" size="50" maxlength="50" value="@Model.Email">
<input type="hidden" name="appendix" value="@Model.AppendixInfo">
<button class="wiz_button" type="submit" disabled="disabled">
<span><span id="buy_button_name">Buy</span></span></button>
</form>
和一个功能PrepareOrder
function prepareOrder(form) {
var selectedPayWay = $('.pay_cont.selected').data('way');
var result;
$.ajax({
type: 'POST',
url: '/Pay/CreateOrder',
data: { payWay: selectedPayWay },
success: function (response) {
if (response.IsSuccess) {
switch (selectedPayWay) {
case payWay.Terminal:
showBookingInfo(response.BookingId, response.ExpiredDate);
result = false;
break;
case payWay.Epay:
$("input[type=hidden][name=Signed_Order_B64]").val(response.SignedString);
$("input[type=hidden][name=appendix]").val(response.AppendixString);
result = true;
break;
}
} else {
toastr.options.timeOut = 10000;
toastr.info(response.Message);
result = false;
}
},
error: function () {
result = false;
},
async: false
});
return result;
}
问题是在新的ipad(Safari)上没有调用CreateOrder
动作。在桌面浏览器上,它工作正常。控制台中没有错误。我尝试在以下后添加提醒:
success: function (response) {
像那样:
success: function (response) {
alert(response.IsSuccess)
和alert
返回true
。为什么?如果没有调用CreateOrder
。我还添加了日志记录到CreateOrder
操作,并且没有输出字符串。
答案 0 :(得分:2)
Safari和/或Ipad支持非常强大的缓存。我的应用程序也遇到了同样的问题。尝试将以下属性添加到控制器(甚至是基本控制器):
[OutputCache(NoStore = true, Duration = 0)]
答案 1 :(得分:0)
看起来这个iOS Safari问题仅在某些版本中重现。对我来说,带有iOS 6.0.1的iPad有这种冗余缓存,但6.1.2却没有。 作为一种解决方法,我使用假数据强制Safari不要查看其缓存:
$.ajax({
type: 'POST',
url: '/Pay/CreateOrder',
data: { payWay: selectedPayWay, fakeDataToAvoidCache: new Date()},
success: function (response) {
//logic goes here
});
基本上,很奇怪,根据规范,Safari会缓存POST请求,而POST请求必须是不可缓存的。