2013-07-07 73 views
0

我對ajax比較陌生,並且查看了大量其他線程,但找不到答案。jquery post的undefined結果

我想從.post調用中讀取結果,但不成功。

下面是代碼:

$.post(http://www.mapquest.com/directions/v1/routematrix?key=...,//I have my actual key where the three dots are 
    {locations:[{latLng:{lat:54.0484068,lng:-2.7990345}},{latLng:{lat:53.9593817,lng:-1.0814175}},{latLng:{lat:53.9593817,lng:-1.0514175}},{latLng:{lat:53.9593817,lng:-1.0114175}}]}, 
    function (data, status, xhr) { 
     console.log(typeof(data)); //this shows: object 
     console.log(data); //this shows: [object object] 
     console.log(data[0]); //this shows: undefined 
     console.log(data.length); //this shows: undefined 
     console.log(status); //this shows: success   
    }, 
    'json' 
); 

我期待輸出看起來像這樣:

{ 
    allToAll: false, 
    distance: [ 
     0, 
     25.685, 
     107.846, 
     78.452 
    ], 
    time: [ 
     0, 
     2260, 
     7253, 
     5930 
    ], 
    locations: [ 
     "Lancaster, England", 
     "Liverpool, England", 
     "Chester, England", 
     "Stoke-on-Trent, England" 
    ], 
    info: { 
     ... 
    } 
}   

任何想法,我做錯了嗎?

+0

'數據'似乎是一個對象,它具有'allToAll','distance','time','locations'和'info'屬性,但是不是**'0'或'length'。 –

+0

[Access/process(嵌套)對象,數組或JSON]的可能的重複(http://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays-or-json) –

+0

什麼是錯誤/你看到的輸出? – Stunner

回答

0

如果有人有興趣,我通過在URL中使用GET方法(而不是職位),並加入JSON作爲這樣的規避問題:

var matrixUrl3 = 'http://www.mapquestapi.com/directions/v1/routematrix?key=YOUR_KEY_HERE&json={locations:[{latLng:{lat:54.0484068,lng:-2.7990345}},{latLng:{lat:53.9593817,lng:-1.0814175}},{latLng:{lat:53.9593817,lng:-1.0514175}},{latLng:{lat:53.9593817,lng:-1.0114175}}]}'; 

$.get(newURL,function(data, status, xhr) {       
      //console here 
     }, 'json'); 

不知道爲什麼post方法不起作用,試圖將我的JSON串起來,如下所示: http://www.json.org/js.html 但是也沒有幫助。 無論如何,規避上述問題就像一個魅力!

0

你的問題是你試圖記錄數據的方式。你已經有一個JavaScript對象data,這樣你就可以直接訪問屬性:

console.log(typeof(data)); // object - correct 
console.log(data);   // [object object] - correct 
console.log(data[0]);  // undefined - correct; this is not an array 
console.log(data.length); // undefined - correct; not an array, so no length 
console.log(status);  // success   

嘗試直接登錄的屬性。例如:

console.log(data.locations[0]); // Should be 'Lancaster, England' 
console.log(data.distance[1]; // should be 25.685 
console.log(data.time[3]);  // should be 5930 
+0

我從記錄中得到的是:Uncaught TypeError:無法讀取未定義的屬性'0' – GR4

+0

好了 - 另一個想法:在您的查詢調用中將''json''更改爲'dataType:'json''。另外,得到一個體面的調試工具:Firefox + Firebug或Chrome +開發者工具。然後,您將能夠檢查來自您的服務器的數據是否是您希望在jQuery和Javascript處理之前得到的數據,並檢查您的函數匹配中的數據。 – 2013-07-07 22:01:56

+0

謝謝@Mike。你的第一個建議不起作用,看起來不正確的語法。你的建議使用螢火蟲是偉大的,但我得到一個更詳細的錯誤日誌。事實證明,mapquest的服務器響應無法解析我的JSON:從請求中解析JSON時出錯:JSONObject文本必須以「{'字符0」開頭。我已經檢查過,我的JSON語法似乎是正確的:http: //jsonlint.com/和我發送了mapquest請求的確切數據,所以我仍然不確定我要去哪裏錯誤... – GR4