Synapse のコンテンツ管理システムを使用している VS 2008 (.Net 3.5) Web サイトに機能を追加する必要があります。何時間も苦労した後、ゼロから始めて、次の作業を新しい Web プロジェクトで行いました。
クライアント側のスクリプトと html は次のとおりです。
<script type="text/javascript">
function ClickedIt() {
$.ajax({
type: "POST",
url: "Default.aspx/FromClient",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert(msg.d);
}
});
} // ClickedIt
function ClickedItDeeper() {
$.ajax({
type: "POST",
url: "/Deeper/ActionsController.aspx/FromClient",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert(msg.d);
}
});
} // ClickedItDeeper
</script>
<asp:Button ID="btnClickMe" runat="server" Text="Click Me - Server" />
<asp:Button ID="btnViaClient" runat="server" Text="Click Me - Client" OnClientClick="ClickedIt(); return false;" />
<asp:Button ID="btnDeeper" runat="server" Text="Click Me - Deeper" OnClientClick="ClickedItDeeper(); return false;" />
さらに良いことに、VB で記述しなければならないので、呼び出している 2 つの異なるテストを次に示します。1 つは私が実行している実際のページ (Default.aspx) で、もう 1 つはメソッドをまとめるための方法 (ActionsController.aspx) です。
Imports System.Web.Services
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub btnClickMe_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnClickMe.Click
Me.lblResult.Text = "From the Server Side: " + DateTime.Now.ToString()
End Sub
<WebMethod()> _
Public Shared Function FromClient() As String
Return "Via the Client: " + DateTime.Now.ToString()
End Function
End Class
ActionsController は次のとおりです。
Imports System.Web.Services
Partial Public Class ActionsController
Inherits System.Web.UI.Page
<WebMethod()> _
Public Shared Function FromClient() As String
Return "Via the Deeper Client: " + DateTime.Now.ToString()
End Function
End Class
上記のすべては、その孤立したサイトでチャンピオンのように機能します. しかし、この CMS サイトで同じことをしようとすると、parseerror: 無効な文字が表示されます。そこにある多くの記事を見た後(修正されたものはありません)、おそらくテレリックまたはCMSソフトウェアでさえJSON.parseを上書きしていると言及していましたが、そうであったようです. もう一方を使用しないように強制し、現在はjson2.jsを使用しています。私が置くとき:
alert(text);
json2.js ファイルのすぐ内側:
JSON.parse = function(text, reviver) {
HTMLページのコンテンツ全体が表示されます。これは、これを呼び出したときに見つからないページです。
$.ajax({
type: "POST",
url: "ActionsController.aspx/FromClient",
data: "{}",
contentType: "application/json",
dataType: "json",
success: function(msg) {
$("#lblResult").html(msg);
alert("success");
},
error: function(xhr, textStatus, errorThrown) {
alert("Ajax error on " + this.url +
"\nStatus: " + textStatus +
"\nError: " + errorThrown +
"\nText: " + xhr.statusText +
"\nxhrStatus: " + xhr.status
);
}
});
SyntaxError: JSON.parse のエラーが表示されますが、テキスト値は OK でステータスは 200 です。
先頭の / を持たないように URL を変更し、最初に en-US を追加しましたが、先頭のスラッシュの有無にかかわらず、すべて役に立ちませんでした。見つからないページが合法かどうかはわかりません。最初、ActionsController ページはフォルダにありました。それ以来、サイトのルートに移動しました。
これは、私がVS2010で何度も行ったことです。それはVS2008で動作しますが、何かが邪魔になっていて、URLに何かを添付するか、このCMSのおかげで何かを付けていると思います. エラーが発生した場合は、 /ActionsController.aspx/FromClient である this.url を渡してくれるので、うまくいきます。
壊れたサイトの実際の ActionsController コードは次のとおりです。
Imports System.Web.Services
Partial Public Class ActionsController
Inherits System.Web.UI.Page
<WebMethod()> _
Public Shared Function FromClient() As String
Return "Via the Deeper Client: " + DateTime.Now.ToString()
End Function
<WebMethod()> _
Public Shared Function Multiply(ByVal Input As Integer) As String
Return "Via the Deeper Client: " + DateTime.Now.ToString()
End Function
End Class
あと 1 時間で、テレリックやシナプスの「機能」のレイヤーとレイヤーの下におそらく非常に単純であるが隠されているものを検索し、微調整し、テストするだけの丸一日になります。
私の一日を作ってください!