0

getJSON()呼び出しを使用してajaxを機能させようとしています。/ Home / GetWeatherに移動すると、ブラウザーにJsonデータが返されます。ただし、jQuery呼び出しは機能していません。何か案は?alert( "Hello")にブレークポイントを設定すると、ヒットしません。Firebugでは、ajax呼び出しは表示されません。何か案は?

$(document).ready(function() {
    $("#Button1").click(function() {
        $.getJSON("/Home/GetWeather", null, function(data) {
            alert("Hello");
        });
    });
});​

コントローラコード

public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }

    public JsonResult GetWeather()
    {
        List<Weather> weather = new List<Weather>();

        // populate weather with data

        return Json(weather, JsonRequestBehavior.AllowGet);
    }
}

意見:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
    <script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery-1.5.1-vsdoc.js" type="text/javascript"></script>
    <script type="text/javascript">

        $(document).ready(function () {

            $("#Button1").click(function () {
                $.getJSON("/Home/GetWeather", null, function (data) { //I hit breakpoint here, but in firebug I dont see any call, nothing
                    alert("Hello"); // Breakpoint here doesnt hit :(
                });
            });

        });

    </script>
</head>
<body>
    <input id="Button1" type="button" name="Button1" value="Get Weather" />
    <div id="Weather"></div>
</body>
</html>

私が見つけた解決策が削除された理由は何ですか?

4

3 に答える 3

4

私の知る限り、あなたはそれをクロスドメインと呼ぼうとしています。サイトのドメインからコードを実行する。html ファイルで localhost から実行されている json を呼び出す前に、何も返されませんでした。しかし、その html を同じ場所に置き、localhost から呼び出すと問題ありません。

于 2012-12-13T13:08:38.753 に答える
3
  • Asp.Net-MVC使用してURLをハードコーディングしないでくださいUrl.Action
  • パラメータを削除しnullます。なぜnullコントローラーに送信する必要があるのですか?省略してください。

ルートを正しく取得するためのコード:

@Url.Action("GetWeather", "Home")

スクリプト内:

$("#Button1").click(function () {
    $.getJSON("@Url.Action("GetWeather", "Home")", function (data) {
        alert("Hello");
    });
});
于 2012-06-24T17:16:06.323 に答える
1

ボタンが送信ボタンまたはアンカーである場合は、false を返すことにより、ボタンのデフォルト アクションをキャンセルしてください。

$("#Button1").click(function() {
    $.getJSON("/Home/GetWeather", null, function(data) {
        alert("Hello");
    });

    return false; // <!-- cancel the default action of the button
});

また@gdoron、彼の回答で述べたように、このような URL をハードコードしないでください。それらを生成するには、常に URL ヘルパーを使用してください。


アップデート:

ビューが表示されたので、URL をスクリプトにハードコーディングしたことがわかります。

<script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.5.1-vsdoc.js" type="text/javascript"></script>

これを行うべきではありません。常に URL ヘルパーを使用する必要があります。

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-1.5.1-vsdoc.js")" type="text/javascript"></script>

また、FireBug などの JavaScript デバッグ ツールの使用法を学ぶ必要があります。これにより、これらのエラーを簡単に検出できます。FireBug を使用したことがある場合は、これらのスクリプトを要求したときに 404 エラーが表示されます。

于 2012-06-24T18:02:19.460 に答える