【发布时间】:2019-07-22 00:43:29
【问题描述】:
我在 Asp 中使用 Web 方法将事件加载到完整日历。它在代码(本地)和服务器 IIS 版本上工作正常。 10. 但是当我从未加载的浏览器事件打开应用程序并且我在(检查模式)POST 内部服务器错误 500 中收到消息。我尝试从浏览器调用 asmx 页面并且它工作但我没有像在服务器上那样调用的选项。
我检查了服务器上的文件夹权限,看起来不错
$(document).ready(function () {
var events = [];
var ostalo = [];
var userrola ="<%=Session["Rola"].ToString()%>";
var userid ="<%=Session["userId"].ToString()%>";
$.ajax({
type: "POST",
url: 'taskovi.asmx/UzmiTaskove',
dataType: "json",
success: function (result) {
if (userrola== "Administrator") {
$.each(result, function (i, data) {
events.push(
{
ID: data.ID,
title: data.title,
start: data.Start,
end: data.End,
backgroundColor: "rgba(51, 121, 183, 1)",
borderColor: "orange",
textColor: "white",
allDay: true
});
});
} ..etc...
AND WEB METHOD
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void UzmiTaskove()
{
List<events> listaTaskova = new List<events>();
string CS = Properties.Settings.Default.conn.ToString();
using (SqlConnection con = new SqlConnection(CS))
{
SqlCommand cmd = new SqlCommand("UzmiTaskoveSve", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
events tas = new events();
tas.ID = rdr["ID"].ToString();
// tas.IdProjekta = Convert.ToInt32(rdr["IdProjekta"]);
tas.title = rdr["Opis"].ToString();
tas.Start = rdr["DatumPocetka"].ToString();
tas.End = rdr["DatumZavrsetka"].ToString();
tas.IdZap = Int32.Parse(rdr["IdZap"].ToString());
//tas.Status = rdr["Status"].ToString();
//tas.BrojSati = rdr["BrojSati"].ToString();
//tas.Dokumenta = rdr["Dokumenta"].ToString();
listaTaskova.Add(tas);
}
}
JavaScriptSerializer js = new JavaScriptSerializer();
Context.Response.Write(js.Serialize(listaTaskova));
}
为什么 asmx 可以在服务器和 localhost 上工作,但不能在 Web 浏览器上工作?
【问题讨论】:
-
我从来没有用过
Context.Response.Write(js.Serialize(listaTaskova));,所以我不确定,但你能不能只返回一个字符串,看看它是否有效? -
此外,asmx 响应在包装器中返回,获取数据的方式不仅仅是
result,而是result.d。更多可能的帮助:stackoverflow.com/questions/8550530/….