2017-02-21 189 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()接受的選擇。