sakir
sakir

Reputation: 3502

Ajax request with web method

Can someone explain me why this gives me an error?

My ajax call something like this.

        <%@ 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;
        }

It says me {"Message":"Type \u0027System.String\u0027 is not supported for deserialization of an array.","StackTrace":"

Upvotes: 2

Views: 2338

Answers (1)

Grundy
Grundy

Reputation: 13381

I think this happens because you wrong call your webmethod with ajax. Your webmethod have one parameter named data with type string, but you try send without name, so try change your code like this:

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'); }
        });
  };

UPDATE

this method work on new project

$.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'); }
    });

if in your case it not work then possibly helps if you provide little more code

UPDATE 2
turns out it's all simple than i thought!
serializeArray() returns Array! So it find on server method with parameters something like List<object>, so to solve you must stringify array too
so try this code

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'); }
    });
};

Upvotes: 2

Related Questions