2017-08-29 67 views
1

我正在嘗試使用Instagram API來檢索某些數據。問題是,從Express服務器發送數據時,返回給客戶端,客戶端不會將數據記錄到控制檯,而是我剛剛得到只有一行顯示一個HTML文檔:通過GET請求來請求數據以表示服務器返回文檔而不是數據

{"urls":["https://scontent.cdninstagram.com/t51.2885-15/s320x320/e35/21042827_129089451063629_713103852630441984_n.jpg"]} 

客戶端方:

$('#retrieve_photos_btn').click(function(){ 
    $.ajax({ 
     url: "/retrieve_photos", 
     type: "GET", 
     success: function(result){ 
      console.log(result); 
     } 
    }); 
}); 

App.js:

app.get('/retrieve_photos', function(req, res){ 
    var options = { 
     method: 'GET', 
     url: 'https://api.instagram.com/v1/users/self/media/recent/?access_token='+access_token 
    } 
    request(options, function(error, resp, body){ 
     if(error) console.log("Retrieving photos failed: " + error); 
     var body_parsed = JSON.parse(body); 

     var media_urls = []; 
     // Iterate over all received media 
     for(var i = 0; i < body_parsed.data.length; i++){ 
      media_urls.push(body_parsed.data[i].images.low_resolution.url); 
     } 
     res.send(JSON.stringify({urls: media_urls})); 
    }); 
}); 

回答

0

所以,我已經找到了問題所在:按鈕是這樣的形式中:

form#retrieve_photos_insta_form(method='GET', action='retrieve_photos') 
    button.btn.btn-primary#retrieve_photos_btn Retrieve 

所以單擊按鈕時,調用/retrieve_photos會通過表單完成,而不是我在問題中編寫的JavaScript代碼。

更改代碼,以便沒有窗體和按鈕直接觸發JavaScript代碼解決了我的問題。

1

嘗試res.json({urls: media_urls})。這將自動爲您設置標題。

而不是

res.send(JSON.stringify({urls: media_urls}))

+0

我試過這個,但不幸的是問題仍然存在。 –

+1

嗯。點擊按鈕後,地址欄中(瀏覽器中)的網址是什麼?它變成了'/ retrieve_photos'。聽起來像你的整個頁面可能已被重新加載爲'/ retrieve_photos' –

+1

謝謝,我已經找到了問題。但是,整個頁面被重新加載爲'/ retrieve_photos',因爲按鈕位於具有'action ='retrieve_photos''屬性的表單內 –