11

JQuery 呼び出しから Search WebMethod にアクセスできません。誰かが私を正しい方向に向けるのを手伝ってくれるかもしれません。

また、誰かが詳しく調べたい場合に備えて、すべてを zip ファイルにまとめました。

http://www.filedropper.com/json例

ありがとうライアン

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>JSON Example</title>
    <script type="text/javascript" language="JavaScript" src="jquery-1.3.1.min.js"></script>

<script type="text/javascript" language="javascript">

function Search() {
    var search = $("#searchbox").val();
    var options = {
        type: "POST",
        url: "Default.aspx/Search",
        data: "{text:" + search + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            alert('Success!');
        }
    };
    $.ajax(options);
}
</script>

</head>
<body>
    <form id="form1" runat="server">
        <input type="text" id="searchbox" size="40" />
        <a href="#" onclick="Search()" id="goSearch">Search</a>
        <br />        
        <div id="Load" />
    </form>
</body>
</html>

そして、これがdefault.aspxのコードビハインドです

 Imports System.Data
    Imports System.Web.Services
    Imports System.Web.Script.Serialization

    Partial Class _Default
        Inherits System.Web.UI.Page

        <WebMethod()> _
        Public Shared Function Search(ByVal text As String) As IEnumerable
            Return "test"
        End Function

    End Class
4

2 に答える 2

15

このような問題を解決するために、最初に行うことはFirebugでそれを監視することです。

[検索]リンクをクリックしてFirebugのコンソールでPOSTリクエスト/レスポンスを見ると、500サーバーエラーがスローされていることがわかります:無効なJSONプリミティブ。

その理由は、「データ」JSONリテラルのキー/値識別子が引用符で囲まれていないためです。17行目は次のようになります。

data: "{'text':'" + search + "'}",

その後、すべてが期待どおりに機能します。

注: 提案されたデータ{テスト:検索}は機能しません。文字列の代わりに実際のJSONリテラルをjQueryに提供すると、JSONの代わりにtest=searchとPOSTのキー/値ペアに変換されます。これにより、ASP.NETAJAXScriptServiceまたはPageMethodが無効なJSONプリミティブエラーをスローします。

于 2009-02-18T23:02:30.357 に答える
6

次のことを行う必要があります (C#):

  • WebMethod は、public static
  • [WebMethod]属性で装飾する必要があります
  • .aspx ページに ScriptManager が必要です
  • ScriptManager の設定EnablePageMethods="true"

そして、ここにいくつかのサンプル JavaScript があります。

$().ready(function() {
    $(yourDropDownList).change(LoadValues);
});


function LoadValues() {
    PageMethods.YourMethod(arg1, CallSuccess, CallFailed);
}

function CallFailed(result) {
    alert('AJAX Error:' + result.get_message());
}

function CallSuccess(result) {
    //do whatever you need with the result
}
于 2009-02-18T22:38:31.053 に答える