jquery ajax 200 OK JSON.ParseError

19,916

Solution 1

Try to remove contentType and dataType from Ajax parameters and let them be identified automatically

Solution 2

Had the same problem with AJAX's 'post' command.

Sent a JSON post request, got a 200 OK repsponse but textStatus was parseerror and errorThrown was SyntaxError: JSON.parse: unexpected character.

This is my JS code:

$.post(url, JSON.stringify(reportVarsJson), function(response) {}, 'json')
.fail(function(jqXHR, textStatus, errorThrown) {
    alert('Error saving report request variables:\n\n' + jqXHR.responseText);
});

The problem turned out to be that my server view (Django) returned an empty response which was not a JSON response.

I changed my server view to return an empty json response and everything works well!

Share:
19,916
Admin
Author by

Admin

Updated on October 30, 2022

Comments

  • Admin
    Admin less than a minute

    I have a control which has a textbox which, when its content changes, will tricker this javascript function:

    page parameter is document.URL as the control has no attached .asxc page and fieldValue is value of the textbox.

    function UpdateFieldsOnListSelection(page, fieldValue) {
        $.ajax({
            type: "POST",
            url: page + "/IsSelectedListPictureLibrary",
            data: { "libraryInfo": fieldValue },
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                alert("Success!");
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert("jqXHR: " + jqXHR.status + "\ntextStatus: " + textStatus + "\nerrorThrown: " + errorThrown);
            }
        });
    };
    

    It keeps throwing this error:

    jqXHR: 200
    textStatus: parsererror
    errorThrown: SyntaxError: JSON.parse: unexpected character

    The code for IsSelectedListPictureLibrary:

    [WebMethod]
    public static bool IsSelectedListPictureLibrary(string libraryInfo)
    {
        if (string.IsNullOrEmpty(libraryInfo)) return false;
        var common = new Utility();
        var storedLibraryInfo = common.GetStoredLibraryInfo(libraryInfo);
        if (storedLibraryInfo == null) return false;
        var web = SPContext.Current.Site.OpenWeb(storedLibraryInfo.WebId);
        var spList = web.Lists[storedLibraryInfo.LibraryId];
        if (spList.BaseTemplate == SPListTemplateType.PictureLibrary)
        {
            web.Dispose();
            return true;
        }
        web.Dispose();
        return false;
    }
    

    I have tried changing json in the ajax to jsonp, but same error occured.
    I tried changing the format of data.

    Any ideas?