0

これは簡単に解決できるはずです.AJAXをいじったことは一度もありません...

初めて AJAX をテストする際に問題が発生しています。

すべてが正しいように見えます。オンラインの例によると、これは機能するはずですが、明らかにそうではありません。

(これは、これを機能させることができるかどうかを確認するための単なるテストであることに注意してください。この単純な計算にサーバー側を使用することは無意味であることを知っています)。

ヘッダーの html は別のレイアウト ページにあり、レンダリングされるため、含めませんが、必要なファイルへの正しいパスがそこにあることを保証します。

とにかく、私がセットアップしたのは、必要に応じて将来の実装と成長のためにこのようにセットアップされています(現在、これらの4つの異なるファイルを使用しています):

HTML (default.cshtml):

    ///Simple AJAX test to multiply to user set numbers on server side
    ///and return the result.

    <h1>Welcome to Us</h1> 

<p>
Lorem Ipsum Porem Lorem Ipsum Porem 
</p>
<p>
    Choose a number from the first list,
    then a number from the second list
    and they will be multiplied together
    using AJAX on the server side, then
    updated on the page, all without having
    to resubmit the form or reload the page!
</p>
<button id="btn1" name="btn1">1</button><button id="btn2" name="btn2">2</button><button id="btn3" name="btn3">3</button><button id="btn4" name="btn4">4</button><button id="btn5" name="btn5">5</button><br/>
<span>First Number:&nbsp;</span><span id="firstNumber" style="height: 20px; width: 20px; margin-bottom: 10px; color: #f00;"></span><br/><br/>
<button id="2btn1" name="2btn1">1</button><button id="2btn2" name="2btn2">2</button><button id="2btn3" name="2btn3">3</button><button id="2btn4" name="2btn4">4</button><button id="2btn5" name="2btn5">5</button><br/>
<span>Second Number:&nbsp;</span><span id="secondNumber" style="height: 20px; width: 20px; margin-bottom: 10px; color: #f00;"></span><br/><br/>
<button id="Compute" name="Compute">Compute</button><br/><br/>
<span>Result:&nbsp;</span><span id="result" style="height: 20px; width: 20px; margin-bottom: 10px; color: #2ba03a;"></span><br/><br/>

最初の JavaScript ファイル (Main.js):

$(document).ready(function () {

    /////////FIRST NUMBER/////////////
    $("#btn1").click(function () {
        $("#firstNumber").html("1");
    });
    $("#btn2").click(function () {
        $("#firstNumber").html("2");
    });
    $("#btn3").click(function () {
        $("#firstNumber").html("3");
    });
    $("#btn4").click(function () {
        $("#firstNumber").html("4");
    });
    $("#btn5").click(function () {
        $("#firstNumber").html("5");
    });

    /////////SECOND NUMBER/////////////
    $("#2btn1").click(function () {
        $("#secondNumber").html("1");
    });
    $("#2btn2").click(function () {
        $("#secondNumber").html("2");
    });
    $("#2btn3").click(function () {
        $("#secondNumber").html("3");
    });
    $("#2btn4").click(function () {
        $("#secondNumber").html("4");
    });
    $("#2btn5").click(function () {
        $("#secondNumber").html("5");
    });

    $("#Compute").click(function () {
        var num1 = $("#firstNumber").text();
        var num2 = $("#secondNumber").text();

        compute(num1, num2);
    });
});

2 番目の JavaScript ファイル (TestAjax.js):

var xmlhttp;
function loadXMLDoc (url, cfunc)
{
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = cfunc;
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}
function compute(number1, number2)
{
    loadXMLDoc("/TestAjax.cshtml?numb1=" + number1 + "&numb2=" + number2, function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById("result").innerHTML = xmlhttp.responseText;
        }
    });
}

最後に、サーバー側の cshtml ファイル (TestAjax.cshtml):

@{
    int numb1 = Request["numb1"];
    int numb2 = Request["numb2"];

    int resultNumb = numb1 * numb2;

    return(resultNumb);
}

それが役立つ場合(そうかもしれないと思います)、サーバーは次のように応答します。

GET http://localhost:14950/TestAjax.cshtml?numb1=4&numb2=2 500 (Internal Server Error) 

ここでは、値がクエリ文字列になっていることがわかりますが...

2 番目の JavaScript ファイル (xmlhttp.send();) の 15 行目でエラーが発生しますが、これが意味するのは、指定されたデータの一部が気に入らなかったということです (または、その行の構文が間違っているのではないかと疑っています)。 、しかし、私はAJAXが初めてなので...)。とにかく、私が見落としている単純なものでなければなりませんが、それが何であるかを見つけることができません。

助けてくれてありがとう!プログラマーのツールボックスに AJAX を追加したいと思っています。

4

2 に答える 2

1

そのようにビューに直接アクセスできるとは思いません。

私が過去に行ったことは、プロジェクトに Ajax コントローラーを追加し、空の _AjaxLayout.cshtml を Views/Shared フォルダーに追加し、Views/Ajax フォルダーに _View_Start.cshtml を追加して、レイアウトを "~/ Views/Shared/_AjaxLayout.cshtml" ファイル。

コントローラーにアクション ("TestAjax") を追加すると、TestAjax.cshtml ファイルを Views/Ajax に配置できます。

アクセスするには、URL は /Ajax/TestAjax?numb1=4&numb2=2 になります。

ページに統合する前に、Ajax URL をデバッグして、期待する結果が得られていることを確認できる場合は、ブラウザーで Ajax URL を直接ヒットすることをお勧めします。

于 2012-11-02T20:48:30.203 に答える
0

さて、私がしなければならなかったことは、主に2つのことでした。

  1. cshtml ファイル (TestAjax.cshtml) 内の 2 つの変数を解析します (キャストは機能しませんでした)。

&

2 return(resultNumb) は明らかに AJAX では正しくありません。次のように置き換える必要がありました: @: @resultNumb

次のいずれかを示した回答を喜んで受け入れます。

  1. ページ全体ではなく、AJAX を使用して単一の値または行のみを送信する方法 (可能な場合)

  2. AJAX リターンで複数の行をグループ化する方法 (「@:」の後に来るものなど)

  3. 「@:」が意味するものとほぼ同じです。

于 2012-11-02T21:17:54.120 に答える