Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 基于web方法的Ajax请求_Asp.net_Jquery - Fatal编程技术网

Asp.net 基于web方法的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><

有人能解释一下为什么这会给我一个错误吗

我的ajax调用类似这样的东西

        <%@ 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:Stry
data:JSON.stringify({data:'test})
我现在正在获取'text'值,但当我使用它时。data:$(e).serializeArray()它告诉我请改用标准event.preventDefault()。您能提供如何使用Ajax调用
kaydetdataa
?看看我的简单测试用例