我有像这样的控制
public JsonResult GetSizes(long Id)
{
try
{
//get some data and filter y Id
}
catch (Exception ex) { }
return Json(//data);
}
我需要通过ajax请求跟随json
var sizes = [];
$.ajax({
type: 'POST',
async: false,
data: { 'Id': selectedId },
url: "/<Controler name>/GetSizes",
dataType: 'json',
contentType: 'application/json; charset=utf-8',
error: function (xhr) {
alert('Error: ' + xhr.statusText);
return false;
},
success: function (result) {
if (result.Result != null) {
if (result.Result.length > 0) {
sizes = result;
}
}
}
});
但是这给了我一个服务器错误。我该如何解决这个问题。
答案 0 :(得分:2)
替换你的
url: "/<Controler name>/GetSizes",
通过
url: "@Url.Action("GetSizes", "Controller_Name"),
你是Ajax必须
吗?async: false?
然后尝试将此作为您的行动
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetSizes(long Id)
{
try
{
//get some data and filter y Id
}
catch (Exception ex) { }
return Json(//data);
}
此外,尝试在您的操作上设置一个断点,并在调试模式下查看您的Ajax是否达到了您的操作。
答案 1 :(得分:0)
这个我的演示,你也可以这样做:
$.ajax({
url: '@Url.Action("CheckCity", "BookingStarts")',
data: { packageId: packageid, cityId: valuecities[valuecities.length - 1] },
type: 'POST',
dataType: 'json',
success:
function(result) {
if (result.Status == true) {
$('#CheckoutDateHotel_@item.CityId').val(result.Date);
}
}
});
控制器中的:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CheckCity(int packageId,int cityId) {
var packageCityModel = PackageDetails.GetPackageCitiesByPackageId(packageId).OfType<HMSService.PackageCity>();
var package = new PackageReservationMasterDal();
var itemPackage = package.GetPackageDetailByPackageId(packageId);
var result = "";
var city = packageCityModel.FirstOrDefault(x => x.CityId == cityId);
if (city != null)
{
result = itemPackage.TravelDateFrom.AddDays(city.NoOfNights).ToShortDateString();
}
return Json(new { Status = true, Date = result });
}
答案 2 :(得分:0)
此处的问题是您没有字符串化您的数据传输对象(DTO)。
一种更清洁的方法就是这样。
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/json3/3.3.0/json3.js"></script>
<script type="text/javascript">
var sizes = [];
var DTO = { 'Id': selectedId };
$.ajax({
type: 'POST',
async: false,
data: JSON.stringify(DTO),
url: "@Url.Action("GetSizes", "Home")",
dataType: 'json',
contentType: 'application/json'
}).done(function(result) {
if (result.Result != null) {
if (result.Result.length > 0) {
sizes = result;
}
}
}).fail(function(xhr) {
alert('Error: ' + xhr.statusText);
return false;
});
</script>
请注意
的使用你也在使用async=false
我想在退出函数之前抓住所有sizes
。 jQuery.deferred将是一本有趣的读物。