Asp.net 基于web方法的Ajax请求
有人能解释一下为什么这会给我一个错误吗 我的ajax调用类似这样的东西Asp.net 基于web方法的Ajax请求,asp.net,jquery,Asp.net,Jquery,有人能解释一下为什么这会给我一个错误吗 我的ajax调用类似这样的东西 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title><
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
$(document).ready(function () {
$('#btn1').click(function () {
var values = JSON.stringify({ data: $('#form1').serializeArray() });
alert($('#form1').serializeArray());
$.ajax({
type: "POST",
url: "Default.aspx/Test",
contentType: "application/json; charset=utf-8",
scripts: true,
dataType: "json",
data: values,
success: function (data) { $('#results').append(data.d); },
error: function () { $('#results').append('hata'); }
});
}); });
</script>
</head>
<body>
<form runat="server" id="form1">
First name: <input type="text" name="firstname"><br>
Last name: <input type="text" name="lastname">
<button id="btn1" type="button">bummm</button>
<div id="results"></div>
</form>
</body>
</html>
[WebMethod]
public static string Test (string data)
{
return "İşlem başarılı"+data;
}
$(文档).ready(函数(){
$('#btn1')。单击(函数(){
var values=JSON.stringify({data:$('#form1').serializeArray()});
警报($('#form1').serializeArray());
$.ajax({
类型:“POST”,
url:“Default.aspx/Test”,
contentType:“应用程序/json;字符集=utf-8”,
脚本:是的,
数据类型:“json”,
数据:价值观,
成功:函数(data){$('#results').append(data.d);},
错误:函数(){$('#results').append('hata');}
});
}); });
名字:
姓氏:
倒霉蛋
[网络方法]
公共静态字符串测试(字符串数据)
{
返回“İşlem başarılı”+数据;
}
它说我{“Message”:“Type\u0027System.String\u0027不支持数组的反序列化。”,“StackTrace”:“我认为发生这种情况是因为您错误地使用ajax调用了webmethod。 您的webmethod有一个名为
data
的参数,类型为string
,但您尝试不使用名称发送,因此请尝试如下更改代码:
var KaydetDataWithAjax = function (e)
{
var values =JSON.stringify({data: $(e).serializeArray()});
alert(values);
$.ajax({
type: "POST",
dataType: 'json',
contentType: "application/json; charset=utf-8",
url: "Harita.aspx/HaritaKaydet",
scripts: true,
data:values,
success: function (dt) { alert(dt);},
complete:function(){},
error: function () { alert('error'); }
});
};
更新
这种方法适用于新项目
$.ajax({
type: "POST",
dataType: 'json',
contentType: "application/json; charset=utf-8",
url: "Harita.aspx/HaritaKaydet",
scripts: true,
data:JSON.stringify({data: 'text'}),
success: function (dt) { alert(dt);},
complete:function(){},
error: function () { alert('error'); }
});
如果在您的情况下它不起作用,那么如果您提供更多的代码,可能会有所帮助
更新2原来这比我想象的要简单!
serializeArray()
返回数组!因此它可以在服务器方法上找到类似于List
的参数,所以要解决这个问题,您也必须将数组字符串化所以试试这个代码
var KaydetDataWithAjax = function (e)
{
var values =JSON.stringify({data: JSON.stringify($(e).serializeArray())});
alert(values);
$.ajax({
type: "POST",
dataType: 'json',
contentType: "application/json; charset=utf-8",
url: "Harita.aspx/HaritaKaydet",
scripts: true,
data:values,
success: function (dt) { alert(dt);},
complete:function(){},
error: function () { alert('error'); }
});
};
错误消息是什么?error:function(){alert('error');}这个返回我知道,但是运行代码时收到的消息是什么?尝试更改错误方法
error:function(err){alert('error');}
并调试并输入err
var。一个错误:500(内部服务器错误)还有这样一个通知:event.returnValue已弃用。请改用标准的event.preventDefault()。{“消息”:“\u0027System.Collections.Generic.IDictionary`2[[System.String,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.Object,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]\u0027 türü,dizinin serisini kaldırmak için desteklenmez.,“StackTrace”:“konum:Strydata:JSON.stringify({data:'test})
我现在正在获取'text'值,但当我使用它时。data:$(e).serializeArray()它告诉我请改用标准event.preventDefault()。您能提供如何使用Ajax调用kaydetdataa
?看看我的简单测试用例