2017-02-21 19 views
0

У меня проблема с ответом ajax. У меня есть запрос ajax, который отправляет Json на сервер, и ответ возвращает json тоже.JQuery responseText undefined

Получаю отклик, но не могу получить ответText. Здесь внизу есть мой код:

$('#outside').click(function() { 
    var formData = '{"nin":"3","etype":"iso","perror":"1000","filename":"C:/Users/Mary/workspace/tdiclient/helloworld.txt"}'// _ sono i due punti e -e il bckslash 
    var response = ''; 
    var posts= $.ajax({ 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
    }, 
    'url' : 'http://localhost:8080/com.tdi/rest/tdi/newcontent/parameters', 
    'type' : 'POST', 
    'data' : formData, 
    responseText: { 
     success: true, 
     mode: "Online" 
    } 
    }) 

    console.log(posts); 
    if(posts.readyState == '1'){ 
    alert(posts.responseText); 
    } 
}); 

Проблема заключается в том, что я получаю следующее сообщение об ошибке:

Cannot read property 'responseText' of undefined

но console.log(posts) печати всего ответ так: enter image description here

Я гугл и Я пробовал много решений, но я не могу найти решение

+0

Кажется, что вы смешиваете собственный объект XHR и оболочку JQuery для него. Почему вы определяете «responseText» в своем коде вместо того, чтобы настраивать функцию «succes» callback, где вы можете получить к ней доступ? –

+0

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call) –

+0

@mary: Учитывая приведенный вами пример кода, ошибки не должно быть. Метод '$ .ajax()' возвращает объект в 'posts', поэтому' posts.responseText' не приведет к этой ошибке. Конечно, у него могут не быть данных, которые вы желаете. –

ответ

0

Я думаю, вы немного смущены тем, как использовать t he $.ajax() способ. Попробуйте следующее:

$('#outside').click(function() { 
    var formData = '{"nin":"3","etype":"iso","perror":"1000","filename":"C:/Users/Mary/workspace/tdiclient/helloworld.txt"}'// _ sono i due punti e -e il bckslash 
    var response = ''; 
    var posts = $.ajax({ 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
    }, 
    'url' : 'http://localhost:8080/com.tdi/rest/tdi/newcontent/parameters', 
    'type' : 'POST', 
    'data' : formData 
    }) 

    posts.done(function(res){ 
    console.log(res) // res should be your responseText 
    }) 
}); 

Кроме того, я не уверен, что ваши заголовки действительны. Может быть, кто-то может прокомментировать это.

+0

Я пробовал это, но никогда ничего не печатал на консоли. – mary

+0

Я также попробовал с успехом/всегда/ошибкой свойства и всегда печатал 'undefined' – mary

0

Существует специальный случай с console.log, потому что он получает ссылку на объект jqXHR, который был возвращен $.ajax(). И поскольку это ссылка, может случиться, что DevTools покажет содержимое объекта (или массива) более позднего времени.

Основная проблема заключается в том, что вы пытаетесь получить доступ к responseText прямо после отправки вашего запроса с $.ajax, который является асинхронным. Свойство responseText будет содержать содержимое ответа после выполнения запроса. Чтобы справиться с этим, вы должны использовать обратный вызов, который будет выполнен после успешного завершения запроса. Объект jqXHR предоставляет метод done, который принимает functon как аргумент, который будет выполнен, когда запрос был успешным.

Вот пример того, как вы могли бы сделать это:

$('#outside').click(function() { 
    var formData = '{"nin":"3","etype":"iso","perror":"1000","filename":"C:/Users/Mary/workspace/tdiclient/helloworld.txt"}'// _ sono i due punti e -e il bckslash 
    var response = ''; 
    var posts= $.ajax({ 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
    }, 
    'url' : 'http://localhost:8080/com.tdi/rest/tdi/newcontent/parameters', 
    'type' : 'POST', 
    'data' : formData 
    }) 

    posts.done(function (data) { 
    console.log(data); 
    alert(data); 
    }) 
}); 

Примечание: я удаляю в responseText на АЯКС объекта конфигурации, потому что это не принято вариант для $.ajax().

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

  • Нет связанных вопросов^_^