我有一些JavaScript调用函数来重新填充下拉列表。有2个调用填充2个不同的下拉列表。这两个在本地开发工作正常。在服务器上只有一个工作。一个错误了。我进行了远程调试,调用到达函数,函数返回正确的结果。它离开函数后发生错误。应用程序是asp.net mvc 3,服务器是windows server 2008 iis7。
我如何缩小造成问题的原因。
<script type="text/javascript">
function getSects(abbr) {
$.ajax({
url: "@Url.Action("SectionSwitch", "Assets")",
data: { abbreviation: abbr },
dataType: "json",
type: "POST",
error: function () {
alert("An error occurred.");
},
success: function (data) {
// var test = JSON.parse(data);
//alert(test);
var items = "";
$.each(data, function (i, item) {
items += "<option value=\"" + item.sectionNum + "\">" + item.sectionname + "</option>";
});
$("#Asset_Section_SectionKey").html(items);
}
});
}
function getDivs(abbr) {
$.ajax({
url: "@Url.Action("DivisionSwitch", "Assets")",
data: {abbreviation: abbr},
dataType: "json",
type: "POST",
error: function() {
alert("An error occurred.");
},
success: function (data2) {
// var test = JSON.parse(data);
//alert(test);
var items = "";
$.each(data2, function(i, item) {
items += "<option value=\"" + item.DivisionKey + "\">" + item.DivisionDescription + "</option>";
});
$("#Asset_Section_Division_DivisionKey").html(items);
}
});
}
$(document).ready(function(){
$("#Asset_Section_Division_Department_DepartmentKey").change(function () {
var abbr = $("#Asset_Section_Division_Department_DepartmentKey").val();
getDivs(abbr);
});
$("#Asset_Section_Division_DivisionKey").change(function () {
var abbr = $("#Asset_Section_Division_DivisionKey").val();
getSects(abbr);
});
});
</script>
它抛出错误的函数getDivs。以下是功能:
public ActionResult DivisionSwitch(int abbreviation)
{
var newdivision = from f in db.Divisions
where f.DepartmentKey == abbreviation
select f;
return Json(newdivision);
}
public ActionResult SectionSwitch(int abbreviation)
{
var newsection = (from t in db.Sections
where t.DivisionKey == abbreviation
select new sectionInfo { sectionNum = t.SectionKey, sectionname = t.SectionDesciption });
return Json(newsection);
}
答案 0 :(得分:1)
设置error handler并查看其内容
$( document ).ajaxError(function(event, jqxhr, settings, exception) {
console.log(jqxhr);
console.log(exception);
});
答案 1 :(得分:1)
更改ajax方法的错误属性,以获取3个参数(jqXHR, textStatus, errorThrown)
并提醒errorThrown
和textStatus
:
error: function (jqXHR, textStatus, errorThrown) {
alert("Error, status: " + textStatus + " error: " + errorThrown);
},
答案 2 :(得分:1)
$ .ajax的错误部分可以接受jqXHR
,textStatus
,errorThrown
类型的三个参数。
第一个参数是jqXHR类型的对象,另外两个是字符串。您可以使用jqXHR.responseText
查看错误。
$.ajax({ // Some settings
error: function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
// or
console.log(jqXHR);
}
根据jQuery网站,他们的例子建议如下:
$.ajax({ // your settings
}).done(function(data, textStatus, jqXHR) {
// Handle success
}).fail(function(jqXHR, textStatus, errorThrown) {
// Handle error here
});
有关详细信息,请查看jQuery.ajax()并阅读折旧部分。
答案 3 :(得分:0)
我很欣赏所有的帮助,但我决定重写一下返回的内容,类似于工作调用返回的内容。显然,服务器对返回的内容有疑问。
public ActionResult DivisionSwitch(int abbreviation)
{
var newdivision = from f in db.Divisions
where f.DepartmentKey == abbreviation
select f;
return Json(newdivision);
}
public ActionResult SectionSwitch(int abbreviation)
{
var newsection = (from t in db.Sections
where t.DivisionKey == abbreviation
select new sectionInfo { sectionNum = t.SectionKey, sectionname = t.SectionDesciption });
return Json(newsection);
}
我现在已改为代码:
public ActionResult DivisionSwitch(int abbreviation)
{
var newdivision = (from f in db.Divisions
where f.DepartmentKey == abbreviation
select new DivisionInfo { DivisionNum = f.DivisionKey, Divisionname = f.DivisionDescription });
return Json(newdivision);
}
我刚刚创建了一个新类来存储结果并将其缩小到所需的两个字段。
public class DivisionInfo
{
public int DivisionNum { get; set; }
public string Divisionname { get; set; }
}