Неверно сформированный запрос AJAX?Где проблема? - PullRequest
2 голосов
/ 21 марта 2012

Вот мой AJAX-вызов:

var dataString = "{existingProject:'"+ $("#existingProject").val() + "',newProjName:'" + $("#newProjName").val()+"'}";
$.ajax({
        type: "POST",
        url: "manageProjects.html",
        data: dataString,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            alert(msg.status + " " + msg.responseText);
            $("#grid").trigger("reloadGrid");
        },
        error: function (errormessage) {
            alert(errormessage.status + " " + errormessage.responseText);
        }
    });

.. и вот подпись метода в моем Spring MVC Controller. Я ожидаю обработать запрос:

@RequestMapping(value="/manageProjects",produces="application/json",method=RequestMethod.POST)
public StatusResponse manageProjects(
        @RequestParam("existingProject") String existingProj,
        @RequestParam("newProjName") String newProj,
        HttpSession session){

Я былвозиться с этим вызовом ajax весь день, и я просто не вижу проблемы.Я пытался использовать load с аргументом данных, post, и я пытался без установки contentType и dataType и с ним.

ResponseText в сообщении об ошибке говорит мне, что вызов не синтаксически правильный .... но нет понятия, почему ...

Я упускаю что-то глупое.Спасибо за понимание ...

Ответы [ 3 ]

0 голосов
/ 21 марта 2012

Вы пытались просто поместить свои данные в объект и указать, что в качестве параметра данных $ .ajax?

его не нужно форматировать.

var data= {"existingProject" : $("#existingProject").val(), "newProjName" : $("#newProjName").val()};

$.ajax({
        type: "POST",
        url: "manageProjects.html",
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            alert(msg.status + " " + msg.responseText);
            $("#grid").trigger("reloadGrid");
        },
        error: function (errormessage) {
            alert(errormessage.status + " " + errormessage.responseText);
        }
    });
0 голосов
/ 29 октября 2013

У меня была такая же проблема.Я использовал плагин данных несанкционированного доступа в Firefox, чтобы проверить данные, отправленные с помощью jquery.Полезная нагрузка была:

POSTDATA = message = test + message

Я применил изменение, данное JayC, к моему запросу JQuery, и оно работает.Детали:

Модификация, предоставленная JayC:

var dataString = JSON.stringify({
existingProject: $("#existingProject").val(),
newProjName: $("#newProjName").val()
});

Мой запрос:

      function post(dest) {
            var dataString = JSON.stringify({ message: 'test message'});
            jQuery.ajax({
                type: "POST",
                url: ndest,
                crossDomain: true,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: dataString,
                success: function (data, status, jqXHR) {                       
                },
                error: function (response, textStatus, errorThrown) {
                    handleError(response, textStatus, errorThrown);
                }
            });
        };  

Контроллер Spring mvc, который обрабатываетrequest:

@RequestMapping(value="myapp/{id}", method={RequestMethod.POST, RequestMethod.PUT})
@ResponseStatus(HttpStatus.CREATED)
public void setNote(@PathVariable("id") String user,  @RequestBody MyModel content) {

Теперь полезная нагрузка:

POSTDATA = {"message": "тестовое сообщение"}

Некоторые подсказки:

  • Используйте данные тампера или любой другой анализатор для проверки полезности вашего запроса
  • Я вижу, что у вас нет @RequestBody в параметрах вашего метода.Может быть, ваш JSON не может быть проанализирован, потому что вы ничего не просите.Попробуйте добавить @RequestBody MyClass content.MyClass должен иметь правильные соответствующие методы получения и установки и пустой конструктор.
0 голосов
/ 21 марта 2012

Неверно JSON.

Просто сделай

var dataString = JSON.stringify({
    existingProject: $("#existingProject").val(),
    newProjName: $("#newProjName").val()
});

Это будет работать в большинстве браузеров. В более старых браузерах вам нужно будет включить определение, например, в http://www.sitepoint.com/javascript-json-serialization/ Обратите внимание, что определение там позволяет вам использовать ранее определенную (собственную) версию, если она существует.

var JSON = JSON || {};  
// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
    var t = typeof (obj);
    if (t != "object" || obj === null) {
        // simple data type
        if (t == "string") obj = '"'+obj+'"';
        return String(obj);
    }
    else {
        // recurse array or object
        var n, v, json = [], arr = (obj && obj.constructor == Array);
        for (n in obj) {
            v = obj[n]; t = typeof(v);
            if (t == "string") v = '"'+v+'"';
            else if (t == "object" && v !== null) v = JSON.stringify(v);
            json.push((arr ? "" : '"' + n + '":') + String(v));
        }
        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...