我创建了静态Web方法,然后我尝试将其调用为像这样的脚本
更新脚本</ strong>
<script type="text/javascript">
debugger;
alert("1");
$(function () {
$.ajax({
type: "GET",
url: "Maintenance.aspx/data_call",
//data: "",
contentType: "application/json;charset=utf-8",
dataType: "json",
async: true,
cache: false,
success: function (result) {
alert("12");
debugger;
var re = JSON.parse(result.d).response;
debugger;
console.log(JSON.parse(result.d).response);
debugger;
},
error: function (error) {
alert(Error);
}
});
});
</script>
更新
码
[WebMethod]
public static string data_call()
{
string result="";
Data td=new Data();
List<spselect_data_Result> selectdata=td.spselect_data().ToList();
DataTable dt=new DataTable();
dt.Columns.Add("RegionID",typeof(int));
dt.Columns.Add("Region",typeof(string));
dt.Columns.Add("StartDate",typeof(DateTime));
dt.Columns.Add("EndDate",typeof(DateTime));
foreach(var add in selectdata)
{
dt.Rows.Add(add.RegionID,add.Region,add.StartDate,add.EndDate);
}
result=DataSetToJSON(dt);
return result;
}
public static string DataSetToJSON(DataTable dt)
{
Dictionary<string, object> dict = new Dictionary<string, object>();
object[] arr = new object[dt.Rows.Count + 1];
for (int i = 0; i <= dt.Rows.Count - 1; i++)
{
arr[i] = dt.Rows[i].ItemArray;
}
// dict.Add(dt.TableName, arr);
dict.Add("response", arr);
JavaScriptSerializer json = new JavaScriptSerializer();
return json.Serialize(dict);
}
protected void Page_Load(object sender, EventArgs e)
{
// data();
}
当我调试代码然后像这样的警报显示
function Error (){[native code]}
当我在jquery上设置调试器并检查然后调试器出现在警报1然后在这一行$(function(){然后在此行上直接执行意味着ajax不调用
首先我尝试在控制台上显示数据
控制台上出现错误 无法加载资源:服务器响应状态为500(内部服务器错误)
当我尝试此操作时,通话仅显示alert("1")
。 alert("12")
未被调用。问题在哪里?
答案 0 :(得分:0)
此问题可能是由web.config文件中的maxJsonLength属性引起的。解决问题您可以在web.config上输入MaxJsonLength属性:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
MaxJsonLength属性是一个整数属性,默认设置为102400(100k),不能无限制。
答案 1 :(得分:0)
我发现您发布的代码存在一些问题。
首先,您不需要type: "POST"
,因为您没有发布/发送任何数据。
因此在ajax请求中更新该部分。
$(function() {
$.ajax({
type: "GET",
url: "Maintenance.aspx/YourMethod",
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function (result) {
alert("12");
debugger;
},
error: function (error) {
alert(Error);
}
});
});
要用帖子来处理它,你必须设置
data: "{}",
请参阅ajax请求中的cache:false
设置,而不是像
$(document).ready(function() {
$.ajaxSetup({ cache: false });
});
接下来在服务器端,无需在页面加载中调用方法data
。
只需在课外页面加载中直接编写它。并从WebMethod
添加属性System.web.services
。
[WebMethod]
public static string YourMethod()
{
return "whatever you want";
}
注意:另外我注意到你的方法名称为data
,所以我的建议是把它改成有意义的东西,因为数据是一个ajax调用参数键,它可以冲突。