Получение ошибки синтаксического анализа при возврате результата ajax

Я не уверен, почему я получаю ошибку синтаксического анализа. Я динамически устанавливаю тип данных на своем ajax, и когда я вызываю его с json в качестве типа данных, я получаю ошибку синтаксического анализа.

Действие контроллера MVC

    public ProductViewModel UpdateProduct(ProductViewModel product)
    {
        var productContract = Mapper.Map<ProductViewModel, ProductContract>(product);
        var productReturned = _productService.UpdateProduct(productContract);

        if (productReturned.HasValue)
        {
            return Mapper.Map<ProductContract, ProductViewModel>(productReturned.Value);
        }
        return null;
    }

Вызов Ajax

var ajaxCall = function (destinationUrl, dataToPost, ajaxDataType, element, callbackFunction) {
    $.ajax({
        url: destinationUrl,
        data: dataToPost,
        contentType: "application/json",
        dataType: ajaxDataType,
        success: function (data) {
            callbackFunction(data, element);
        },
        error: function (req, status, errorObj) {
            console.log(status);
        }
    });
}

функция обратного вызова

Это метод, который работает при успешном выполнении ajax, моя база данных успешно обновляется, но мне нужны данные, возвращаемые для обновления пользовательского интерфейса. Я пытаюсь получить это как data, data.d и data.d[0]

function updateProductRow(data, element) {
    console.log(data.d[0]);
}

person eagercoder    schedule 24.04.2016    source источник
comment
Вы проверяли в инструментах разработчика возвращаемые данные?   -  person Karthik M R    schedule 24.04.2016
comment
@KarthikMR вот почему я регистрирую возвращенные данные, это ошибка синтаксического анализа   -  person eagercoder    schedule 24.04.2016
comment
Это означает, что вы не возвращаете действительный json. Возврат null определенно вызовет это. Я не знаком с кодом в другом случае возврата, это создает json? Это не похоже   -  person Wesley Smith    schedule 24.04.2016
comment
@DelightedD0D Привет, спасибо за ответ, данные, которые я отправляю, действительны, поэтому они не соответствуют возвращаемой нулевой части кода, вместо этого они возвращают объект.   -  person eagercoder    schedule 24.04.2016
comment
Хм, я не уверен, что вы правильно понимаете dataType. Согласно документам. dataType (по умолчанию: Intelligent Guess (xml, json, script или html)) Тип: String, Тип данных, которые вы ожидаете получить от сервера. Вы возвращаете объект напрямую, вы скорее всего, сначала нужно преобразовать его в JSON. Возможно, с помощью какой-либо функции сериализации, но я не знаком с asp, но этот выглядит примерно правильно -in-net-4" title="превратить острый объект c в строку json в сети 4"> stackoverflow.com/questions/6201529/   -  person Wesley Smith    schedule 24.04.2016
comment
Также имейте в виду, что если код вашего сервера выдает ошибку/предупреждение, и у вас включен отчет об ошибках, или код вашего сервера выдает любой другой ответ, который приведет к недопустимому ответу JSON (по крайней мере, в случае с php).   -  person Wesley Smith    schedule 24.04.2016


Ответы (1)


Я понял это, в случае приложения ASP.NET MVC с действием контроллера мне просто нужно было иметь атрибут над моим методом, чтобы принять глагол, который будет сообщением. А также для преобразования возвращаемого типа в результат JSON.

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult UpdateProduct(ProductViewModel product)
    {
        var productContract = Mapper.Map<ProductViewModel, ProductContract>(product);
        var productReturned = _productService.UpdateProduct(productContract);

        if (productReturned.HasValue)
        {
            return Json(Mapper.Map<ProductContract, ProductViewModel>(productReturned.Value));
        }
        return null;
    }
person eagercoder    schedule 24.04.2016
comment
В качестве наблюдения, где у вас есть return null;, вы можете рассмотреть возможность возврата действительного ответа JSON со значимым сообщением об ошибке вместо нуля. В настоящее время, если вы когда-нибудь нажмете return null;, вы получите ту же ошибку синтаксического анализа, о которой вы спрашивали. Возвращаемое осмысленное сообщение об ошибке более изящно и поможет вам обеспечить лучший UX в целом. Только мои два цента, хотя :) - person Wesley Smith; 25.04.2016
comment
@DelightedD0D Спасибо!... я планировал вернуть что-то вроде {описание: произошла ошибка}.. у вас есть письмо? - person eagercoder; 25.04.2016