1

DNN 4.9.2 Web サイトで、jquery を使用してサーバー側のメソッドを呼び出そうとしています。次のコードでリクエストヘッダー「X-OFFICIAL-REQUEST」を設定しています。JavaScript コード ...

jQuery.ajax({
    type: "POST", 
    async: "false",
    url: location.href,
    dataType: "json",
    data: ({'FUNCTION': 'FunctionName', 'param0': '1' }),
    success: function(data) {
},
    error: function(XMLHttpRequest, textStatus, errorThrown) {
    },
    beforeSend: function(xhr) {
        xhr.setRequestHeader("X-OFFICIAL-REQUEST", "TRUE");//Used to ID as a AJAX Request
    },
    complete: function(XMLHttpRequest, textStatus) {
    }
});

コードビハインドでリクエストを処理しています

Response.Write(strData)
Response.Flush()

「HTTPヘッダーResponse.Flushが送信された後、サーバーはヘッダーを追加できません」というエラーが表示されます。

コードビハインド...

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Request.Headers("X-OFFICIAL-REQUEST") Is Nothing Then
  If Request.Headers("X-OFFICIAL-REQUEST").ToString().ToLower() = "true" Then 
     AjaxWrapper() 
  End If 
End If 
End Sub

Protected Sub AjaxWrapper()
 Response.Clear()
        Dim strData As String = String.Empty
        Dim type As Type = [GetType]()
        Dim method As MethodInfo = type.GetMethod(Request.Params("FUNCTION"))
        Dim objs As Object() = New Object(method.GetParameters().Length - 1) {}
        For i As Integer = 0 To objs.Length - 1
            objs(i) = (New PortalSecurity()).InputFilter(Request.Params("param" & i), PortalSecurity.FilterFlag.NoMarkup)
        Next

        If method IsNot Nothing Then
            strData = method.Invoke(Me, objs) 'This method is returning a test Message fr eg. Test Data
        End If
        Response.Write(strData)
        Response.Flush()
        Try
            Response.Close()
        Catch
        End Try
        Response.End()
        Return
End Sub
4

1 に答える 1

1

サーバー側では、何らかのテキストを出力してから、ヘッダーを送信しようとしている必要があります。テキストは、改行文字、スペース、または任意のテキストである可能性があります。ヘッダーが送信された後にすべてのテキスト出力が行われるようにする必要があります。これを行うには、出力をサーバーにバッファリングし、ヘッダーを送信する必要がないことがわかった後にのみ送信します。

于 2012-10-09T06:44:25.240 に答える