paradise_lost
paradise_lost

Reputation: 119

Receiving json via ajax asp.net

My variable data in function ShowFavorits is undefined even do that my ajax call do return a json string.

<script type="text/javascript">
$(document).ready(function () {
    ShowFavorits();

    function AjaxGet() {
        var param = "{'_userID': '1337'}";
        $.ajax({
            type: "POST",
            url: "/webservices/MinSide.asmx/GetFavorits",
            data: param,
            contentType: "application/json;",
            dataType: "json",
            success: function (data) {
                if (data.hasOwnProperty("d")) {                      
                    return (data.d);
                }
            },
            error: function (data) {
                //error
            }
        });
    }

    function ShowFavorits() {
        var data = AjaxGet();

        $("#addedList").html(
        $("#addedTemplate").render(data)
        );
    }
});

        [WebMethod]
    public string GetFavorits(string _userID)
    {
        JavaScriptSerializer jss = new JavaScriptSerializer();
        jss.MaxJsonLength = int.MaxValue;
        string JsonData = string.Empty;

        var db = new ModelDataContext();
        var list = db.table.Where(x => x.userID == _userID).OrderBy(x=> x.TimePin).ToList();

        JsonData = jss.Serialize(list);  
        return (JsonData);
    }

Why cant i return the result from my ajax?

Hope someone can help me, have been stuck for hours now debugging this.

Thanks in advance.

Upvotes: 0

Views: 414

Answers (1)

thefrontender
thefrontender

Reputation: 1842

The call to $.ajax in AjaxGet is asynchronous: the function returns undefined because the ajax call hasn't finished.

You should move the call to ShowFavourits into the ajax success function so that it executes once the ajax call is complete/successful

<script type="text/javascript">
$(document).ready(function () {
    // Kick-off the ajax request
    AjaxGet();

    function AjaxGet() {
        var param = {_userID: '1337'};
        $.ajax({
            type: "POST",
            url: "/webservices/MinSide.asmx/GetFavorits",
            data: param,
            dataType: "json",
            success: function (data) {
                if (data.hasOwnProperty("d")) {                      
                    ShowFavorits(data.d); // Pass the data to the template
                }
            }
        });
    }

    function ShowFavorits(data) {
        $("#addedList").html(
            $("#addedTemplate").render(data)
        );
    }
});

Upvotes: 1

Related Questions