1

私はフォームを持っています:

<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たが、出力文字列はありません。

4

2 に答える 2

2

SafariやiPadは、非常に強力なキャッシュをサポートしています。私のアプリケーションでも同じ問題がありました。次の属性をコントローラー(またはベースコントローラー)に追加してみてください。

[OutputCache(NoStore = true, Duration = 0)]
于 2012-11-02T08:49:28.950 に答える
0

このiOSSafariの問題は、一部のバージョンでのみ再現されているようです。私にとって、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リクエストをキャッシュするのは奇妙です。

于 2013-08-29T14:52:00.530 に答える