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