I have a problem with ajax response. I have an ajax request that sends Json to a server, and the response return a json too.
I receive the response but I can't reach the responseText. Here below there is my code:
$('#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);
}
});
The problem is that I get the following error:
Cannot read property 'responseText' of undefined
but the console.log(posts)
print all the response like this:
I googled and I tried many solutions but I can't find the solution
I think you're a bit confused about how to use the $.ajax()
method. Try this:
$('#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
})
});
Additionally, I'm not entirely confident that your headers are valid. Maybe someone else can comment on that.
There is a special case with the console.log
because it get the reference to the jqXHR object which was returned by $.ajax()
. And because it's a reference it can happen some times that the DevTools will show the content of an object (or array) of a later time.
The main problem is that you are trying to access the responseText
diretly after sending your request with $.ajax
which is asynchronously. The property responseText
will contain the content of the response after the request is fulfilled. To handle that you must use a callback which will be executed after the request was successful. The jqXHR object provides the method done
which takes a functon as argument which will be executed when the request was successful.
Here is an example how you could do it:
$('#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);
})
});
Note: I remove the the responseText on the ajax config object because it's not an accepted option for $.ajax()
.