2015-12-29 77 views
1

我有一臺運行單個網頁的節點服務器。該頁面有一個聯繫表單和一個發送按鈕。發送ajax獲取節點請求,響應未定義

如果我點擊發送,下面的代碼將運行:

$('.contactsend').click(function(){ 
    $.ajax({ 
     method: "GET", 
     url: "http://127.0.0.1:3000/contact", 
     dataType: "jsonp" 
    }) .done(function(data) { 
      alert(data); 
     }) 
     .fail(function() { 
      alert("error"); 
     }) 
     .always(function() { 
      alert("complete"); 
     }); 
}) 

這遠遠看起來OK,達到頁面。

這是中間件做什麼:

router.get('/', function(req, res, next) { 
    res.send({test:'test'}) 
    //res.send('test') 
}); 

發送此之後,該網頁將顯示以下信息:

Uncaught SyntaxError: Unexpected token : 

如果我不派json,但是字符串代替,該消息像

Uncaught ReferenceError: test is not defined 
+1

有什麼造成的問題沒有標準的迴應。你可以使用'res.json'而不是'res.send'。 –

+0

我將'res.send'更改爲'res.jsonp',這有效。如果我使用'dataType:「json」''我受到'access origin' -peep- – Randy

+0

的困擾,您可以在不更改響應類型的情況下發送響應,但您必須替換特殊字符,但這不是真實的方法。 –

回答

3

的客戶端JSONP期待,但您發送JSON。

試試這個:

router.get('/', function(req, res, next) { 
    res.jsonp({test:'test'}); 
}); 
+0

謝謝!這樣做了!我會盡快接受。 – Randy

1

如果您不需要克服跨域限制,你可以使用res.json()。嘗試:

router.get('/', function(req, res, next) { 
    res.json({test:'test'}); 
}); 

,並更改ajax.dataTypejson

$.ajax({ 
    method: "GET", 
    url: "http://127.0.0.1:3000/contact", 
    dataType: "json" 
    // ... 
+0

給出了相同的結果:( – Randy

+2

你需要更改ajax數據類型爲'json'也 –

+0

謝謝,應該確實做到這一點,但後來我得到'訪問起源'的東西困擾 – Randy