我正在尝试使用getJSON()调用来进行ajax工作。 当我导航到/ Home / GetWeather时,我在浏览器中返回Json数据。 但是jQuery调用不起作用。有任何想法吗? 当我将断点置于警报状态(“你好”)时,它从未命中。 在萤火虫中,我没有看到任何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>
我发现解决方案的原因已被删除???
答案 0 :(得分:4)
据我所知,你试图将其称为跨域。让代码用完网站的域名。在我使用html文件之前调用从localhost运行的json,它确实没有返回任何内容。但是把那个html放到同一个地方,从localhost调用它就可以了。
答案 1 :(得分:3)
Asp.Net-MVC
使用Url.Action
null
参数。为什么需要将null
发送给控制器?只是省略它。获得正确路线的代码:
@Url.Action("GetWeather", "Home")
在剧本中:
$("#Button1").click(function () {
$.getJSON("@Url.Action("GetWeather", "Home")", function (data) {
alert("Hello");
});
});
答案 2 :(得分:1)
如果按钮是提交按钮或锚点,请确保取消该按钮的默认操作:
$("#Button1").click(function() {
$.getJSON("/Home/GetWeather", null, function(data) {
alert("Hello");
});
return false; // <!-- cancel the default action of the button
});
同样正如@gdoron
在他的回答中所说,永远不要硬编码这样的网址。始终使用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 helpers:
<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错误。