2016-12-27 55 views
1

我正在做一個AJAX POST請求與多個對象到一個node.js服務器。雖然我的服務器發送狀態碼200,但我仍然收到錯誤Javascript AJAX SyntaxError: Unexpected token E in JSON at position 0。這裏是我的POST請求:Javascript AJAX SyntaxError:意外的令牌E在JSON位置0在ajax + node.js

 var company_id = "some_generic_id"; 
    var president = "obama"; 

    var postData = { 
     company_id : company_id, 
     president : president 
    }; 


    $.ajax({ 
     type: "POST", 
     url: '/api/test_link', 
     data: JSON.stringify(postData), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: postData, 
     success: function(data, status) { 
     console.log('it worked!') 
     }, 
     error: function(request, status, error) { 
     console.log(request); 
     console.log(status); 
     console.log(error); 
     } 
    }); 

,這裏是我的服務器端代碼:

app.post('/api/test_link', function(req, res) { 

      console.log('--post data--'); 
      console.log(req.body); 
      /* 
       prints out: 
       --post data-- 
       { company_id: 'company_id', president: 'obama' } 

      */ 
      res.sendStatus(200); 

    }); 

下面是從我的網絡選項卡上的圖像:

Network tab

有誰知道我可能會丟失或爲什麼我的postData語法無效?

+0

檢查您的網絡響應看到它的結果? – Beginner

+0

我的網絡響應是一個狀態200 ..但由於它返回200,這是不是說AJAX請求成功(而不是錯誤)? –

+0

它在你的網絡響應中顯示json對象嗎?檢查 – Beginner

回答

1

The docs Ajax的呼叫狀態有關dataType選項:

The type of data that you're expecting back from the server. "json": Evaluates the response as JSON and returns a JavaScript object.

既然你不返回從服務器上的任何數據,你空的數據解析爲JSON,產生的誤差。如果您沒有返回任何數據,只需刪除dataType: "json"即可。

1

app.post('/api/test_link', function(req, res) {開頭添加res.writeHead(200, {"Content-Type": "application/json"});指定您希望響應爲JSON格式

刪除您

res.sendStatus(200); 

由於res.writeHead(200, {'Content-Type': 'application/json'});也將設置你的StatusCode

因此,這將是這個樣子

app.post('/api/test_link', function(req, res) { 

      res.writeHead(200, {'Content-Type': 'application/json'}); 
      console.log('--post data--'); 
      console.log(req.body); 
      /* 
       prints out: 
       --post data-- 
       { company_id: 'company_id', president: 'obama' } 

      */ 
      res.send(); 

    }); 
+0

嗨 - 我試過'res.send({status:200})'這似乎工作......請給我一個例子,我應該添加'res.writeHead(200,{ 「Content-Type」:「application/json」});'? –

+0

他指定'dataType:「json」',所以響應將被解析爲JSON而不管返回的MIME類型 –

相關問題