2017-02-21 147 views
0

我有一个Ajax响应的问题。我有一个将Json发送到服务器的ajax请求,并且响应也会返回一个json。jquery responseText undefined

我收到响应,但无法到达responseText。这下面有我的代码:

$('#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”回调函数? –

+0

可能的重复[如何从异步调用返回响应?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+0

@mary:鉴于您提供的代码示例,应该没有错误。 '$ .ajax()'方法会将一个对象返回到'posts',所以'posts.responseText'不会产生这个错误。当然,它可能没有你想要的数据。 – 2017-02-21 20:45:53

回答

0

我想你对如何使用t有点困惑他$.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

我也尝试过财产成功/总是/错误,并始终打印'未定义' – mary

0

console.log有一个特殊情况,因为它获得对$.ajax()返回的jqXHR对象的引用。而且因为它是一个参考,所以DevTools可能会在一段时间后显示一个对象(或数组)的内容。

主要的问题是你试图在发送你的请求$.ajax这是异步后直接访问responseText。物业responseText将包含请求完成后的回应内容。为了处理这个问题,你必须使用一个在请求成功后执行的回调函数。 jqXHR对象提供了方法done,该方法将函数作为参数,并在请求成功时执行。

下面是一个例子,你如何能做到这一点:

$('#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的配置对象,因为它不是一个$.ajax()接受的选择。