Как мне обрабатывать ответы JQuery .ajax с сервера - PullRequest
1 голос
/ 13 сентября 2011

Я пытаюсь выяснить, как обработать ответ от сервера (сервер возвращает либо true, либо false (в кодировке json)) с помощью ajax / query:

function submitFormWithAjax(form) {
    form = $(form);

    $.ajax({
        url: form.attr('action'),
        data: form.serialize(),
        type: (form.attr('method')),
        dataType: 'json'
    });

    var serverResponse = eval(result.responseText);
    console.log(serverResponse);
    return serverResponse;
}

теперь, когда я консоль записываю в журнал результат, там свойство responseText правильно отображается как true / false, однако всегда кажется, что функция возвращает true. Я не программист javascript / jquery, поэтому, если то, что я делаю выше, выглядит «глупо», простите меня, я пытаюсь соединить все вместе.

- Исправление: функция всегда возвращает false (не так, как я говорил выше)

Ответы [ 3 ]

3 голосов
/ 13 сентября 2011
function submitFormWithAjax(form) {
    var form = $(form);
    var ret = false;
    $.ajax({
        url: form.attr('action'),
        data: form.serialize(),
        type: (form.attr('method')),
        datatype: 'json',
        success: function( data, status, xhttp) {
             // data will be true or false if you returned a json bool
             ret = data;
        },
        async: false // this is generally bad, it will lock up your browser while it returns, but the only way to fit it into your pattern.
    });
    return ret;
}

Существует также плагин, который делает небольшую работу за вас:
http://jquery.malsup.com/form/

О, также обратите внимание на регистр имен вашей собственности и значения.Я думаю, что «dataType» должен быть «datatype»

Я не схожу с ума по этому решению, но он поможет вам, где вам нужно.Я думаю, что вам нужно немного изменить рефакторинг, чтобы он работал должным образом асинхронно.

1 голос
/ 13 сентября 2011

Это, вероятно, ближе к правильному способу сделать это ....

$("#SomeButtonThatOpensDialog").click(function()
{
    $("#ElementWithForm").dialog({
        // dialog options here
        buttons: {
            Submit: function() {
                $.ajax({
                    // ajax options
                    success: function(data, status, xhttp)
                    {     
                        if ( data )
                        {
                          // if true
                          $("#ElementWithForm").dialog("destroy");
                        }
                        else 
                    { // if false, show some sort of message with errors
                            alert("OH NO!");
                        }                      
                    }
                });
            }
        }
    })
});
1 голос
/ 13 сентября 2011

Я подозреваю, что вы возвращаете строку, похожую на bool.Как будет выглядеть result.responseText, если вы войдете в консоль как console.log(result.responseText)?Содержит ли это кавычки?

Если я прав, вы можете сделать что-то вроде этого: var serverResponse = $.parseJSON($.parseJSON(result.responseText))

Если это строка, и вы можете изменить ее, чтобы она не была строкой, вам следуетсделай так и иди с ответом Дарта8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...