2012-06-24 2 views
0

Я пытаюсь сделать работу ajax с помощью вызова getJSON(). Когда я перехожу в/Home/GetWeather, я возвращаю данные Json в браузере. Однако вызов jQuery не работает. Есть идеи? Когда я поставил точку останова на предупреждение («Привет»), он никогда не попадал. В firebug Я не вижу никакого вызова ajax. Есть идеи?MVC3 jQuery getJSON не вызывает вызов

$(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> 

Любая причина, почему решение, которое я нашел был удален ???

+0

Корректный путь к контроллеру? Может быть что-то вроде '../ Home/GetWeather'. Кроме того, вы можете удалить «null» со ​​своего звонка – Johan

+0

Убедитесь, что у вас нет проблем с политикой «Одинаковый исход». См. Http: // stackoverflow.com/вопросы/2538215/cross-domain-scripting-issues-jsonp –

+3

@CharlieKilian. Он отправляет данные в диспетчер, как он может разоблачить одну и ту же политику происхождения? – gdoron

ответ

3
  • Не жесткий код URL с Asp.Net-MVC использования Url.Action
  • Удалить параметр null. Зачем вам нужно отправить null на контроллер? просто опустите его.

код, чтобы получить правильный маршрут:

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

Внутри скрипта:

$("#Button1").click(function() { 
    $.getJSON("@Url.Action("GetWeather", "Home")", function (data) { 
     alert("Hello"); 
    }); 
}); 
+0

It не имеет никакого значения, если существует null или no null. Мне не нужен Url.Action, я использую jQuery Все в том же приложении MVC. – monstro

+0

@Sigourney_Weaver. Правильно, так зачем его держать ?! Три точки – gdoron

+0

Как я уже сказал, это ничего не меняет, хорошо, я удаляю его, если вы хотите, та же проблема. – monstro

1

Убедитесь, что вы отменить действие по умолчанию кнопки, если это кнопка отправить или анкер с возвратом false:

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

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

Также как @gdoron сказал в своем ответе, никогда не писал хард-код. Всегда используйте помощники URL для их создания.


UPDATE:

Теперь, когда вы показали свой взгляд, я вижу, что вы жёстко 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> 

Вы должны never do this. Вы должны всегда использовать 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, который делает обнаружение этих ошибок душевным пирога. Если вы использовали FireBug, вы бы видели ошибки 404 при запросе этих сценариев.

+0

Но он упоминает, что он не видит запрос в FireBug, если это была проблема, он должен был его увидеть, не делает Это мастер? – gdoron

+0

Он не видит его, потому что он перенаправляется, и нет времени для запроса AJAX даже начать. К сожалению, поскольку ОП не показал свою точку зрения, мы могли только гадать, если это так или нет. –

+0

Может быть, я жду, чтобы посмотреть, как он выглядит. Если это проблема, он должен был сказать нам, что он перенаправляется с помощью якоря ... :( – gdoron

4

Насколько я знаю, вы пытаетесь назвать это кросс-доменом. Наличие кода из домена сайта. Прежде, чем я получил html-файл, вызвал json, запущенный из localhost, и он ничего не возвращает. Но поставьте этот html в одно и то же место, назовите его с localhost, и все будет в порядке.

Смежные вопросы