2015-12-03 2 views
1

У меня ошибка в запросе AJAX, который происходит только с большими объектами JSON.Проблемы с большим POST-запросом

Я использую объект JSON холста с рисунками на нем (прямоугольники, линии, freedraw и т. Д.). Когда пользователь будет выполнен и хочет сохранить его на потом, он сохранит его и займется другим бизнесом. У меня проблема, когда чертеж исключительно велик, либо POST не ударит по методу контроллера.

Я добавил несколько параметров конфигурации для моего web.config, включая:

<system.web.extensions> 
    <scripting> 
    <webServices> 
     <jsonSerialization maxJsonLength="86753090" /> 
    </webServices> 
    </scripting> 
</system.web.extensions> 
<security> 
    <requestFiltering> 
    <requestLimits maxAllowedContentLength="1073741824" /> 
    </requestFiltering> 
</security> 
<httpRuntime maxRequestLength="1048576"/> 

Все, которые не имеют не решить эту проблему; код для запроса выглядит следующим образом.

$('#submitSketch').click(function() { 
       var jsonString = JSON.stringify(lc.getSnapshot()); 
       $.ajax({ 
        type: "POST", 
        url: "@Url.Action("SaveSketch")", 
        dataType: "json", 
        contentType: "application/json; charset=utf-8", 
        data: JSON.stringify({ id: $("#currLevelId").val(), jsonString: jsonString }) 
       }) 
       .done(function (data) { 
        alert("Saved"); 
       }) 
       .fail(function (XMLHttpRequest, textStatus, error) { 
        alert("Unable to save!"); 
       }); 
      }); 

Заголовок метода является:

[HttpPost] 
public ActionResult SaveSketch(int id, string jsonString) 

Любая помощь будет оценена. Всего 500

POST http://localhost:59394/Job/SaveSketch
500 (Внутренняя ошибка сервера) отправить @ JQuery-1.9.1.js: 8526
jQuery.extend.ajax @ JQuery-1.9.1.js: 7978
(анонимно функция) @ 70: 147
jQuery.event.dispatch @ JQuery-1.9.1.js: 3074
elemData.handle @ JQuery-1.9.1.js: 2750

+2

Есть ли у вас какие-либо ошибки в консоли браузера? – DavidG

+0

Ошибки теперь в вопросе –

+0

Вы должны быть в состоянии получить гораздо лучшую информацию, проверив запрос Ajax в своем браузере. Вы должны точно увидеть, что сервер возвращает вам. – DavidG

ответ

0

Я считаю, что вы столкнулись с этой проблемой, потому что вы неверны. Вы отправляете один объект из браузера, но ваш метод контроллера ожидает два свойства.

Попробуйте создать класс:

public class MyClass 
{ 
    public int id {get;set;} 
    public string jsonString {get;set; 
} 

и затем обновить метод контроллера, чтобы выглядеть следующим образом:

[HttpPost] 
public ActionResult SaveSketch(MyClass myClass) 
+0

Это определенно лучший способ сделать это; и я сохраню это как таковое. Но, к сожалению, это не решило проблему. –

+0

Я не думаю, что вам нужно делать данные: JSON.stringify ({id: $ ("# currLevelId"). Val(), jsonString: jsonString}); вы должны иметь возможность просто сделать это: data: {id: $ ("# currLevelId"). val(), jsonString: jsonString} Если вы все еще получаете ошибку 500, то, скорее всего, сериализация не соответствует тому, что контроллер ожидает. Если вы установите точку останова в первой строке этого метода Conrtoller, получится ли это? – peinearydevelopment

+0

Нет, но я помещал catch_ application_error в global.asax, и ошибка, возникающая в результате: «Ошибка при сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение, установленное в свойстве maxJsonLength». Поэтому по какой-то причине это не соответствует значению, которое я установил в файле .config. –

Смежные вопросы