1

JSONPでajaxを使用している場合でもキャッシュを強制する方法はありますか?

以下の 3 つのケースと結果をご覧ください。

#1。同じホストからのリクエスト(リクエストを行うページとして保存) で、JSONP なし- キャッシュは正しく動作します。

$.ajax({

    type: "GET",
    url: "http://samehost.com",
    data: "{ 'format': 'json' }",
    contentType: "application/json",
    success: function(data) {
        // do stuff with data
    }

});

#2。JSONP のない別のホストからのリクエストで、same origin policyエラーが発生します。

$.ajax({

    type: "GET",
    url: "http://differenthost.com",
    data: "{ 'format': 'json' }",
    contentType: "application/json",
    success: function(data) {
        // do stuff with data
    }

});

#3。別のホストからのリクエストで、JSONP を使用するとキャッシュが機能しないようです -2-3 secロードに時間がかかります。#1 about 70-100ms

$.ajax({

    type: "GET",
    url: "http://differenthost.com",
    data: "{ 'format': 'json' }",
    contentType: "application/json",
    dataType: "jsonp",
    success: function(data) {
        // do stuff with data
    }

});

私の質問を繰り返しますが、JSONP で ajax を使用している場合でもキャッシュを強制する方法はありますか?


以下に、私の ServiceStack 設定を示します。

Globas.asax.vb

Public Class Global_asax
    Inherits System.Web.HttpApplication

    Public Class HelloAppHost
        Inherits AppHostBase

        Public Sub New()
            MyBase.New("Web Services", GetType(Wrapper).Assembly)
        End Sub

        Public Overrides Sub Configure(ByVal container As Container)

            ' Routes
            Routes.Add(Of GetData)("/GetData").Add(Of GetData)("/GetData/{*}")

            ' Cache & Cors 
            container.Register(Of ICacheClient)(New MemoryCacheClient())
            Plugins.Add(New Cors.CorsFeature())


        End Sub

    End Class


    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

        Dim apphost = New HelloAppHost()
        apphost.Init()

    End Sub

End Class

WS.vb

Public Class Wrapper

    <EnableCors()>
    Public Class WrapperGetData
        Inherits Service

        Implements IService(Of GetData)
        Public Function Execute(ByVal request As GetData) As Object Implements ServiceStack.ServiceHost.IService(Of GetData).Execute

        Dim cacheKey As String = "GetDataKey"
        Dim expireInTimespan = New TimeSpan(1, 0, 0)

        Return Me.RequestContext.ToOptimizedResultUsingCache(
          MyBase.Cache,
          cacheKey,
          expireInTimespan,
          Function()
            Return request.HandleRequest()
          End Function
        )

        End Function

    End Class
End Class
4

0 に答える 0