Так что я просто запускаю демо , чтобы узнать о перекрестном происхождении JSONP. Демо-версия работает с node.js. Вот index.html:
<p>hello world</p>
<script>
function myFunction (data) {
alert('get the data successfully,data changes after 2 seconds!');
let p = document.getElementsByTagName('p')[0];
setTimeout(function () {
p.innerHTML = data.message
}, 2000);
}
</script>
<script src="http://localhost:3001?callback=myFunction"></script>
</body>
Вот serverRes.js:
var express = require('express');
var app = express();
var responsePort = 3001;
app.get('/', function (req, res) {
var callbackName = req.query.callback; // myFunction
console.log(callbackName);
res.send(callbackName+"({'message': 'hello world from JSONP!?'});");
// myFunction({'message': 'hello world from JSONP!'})
})
app.listen(responsePort, function () {
console.log("jsonp_responser server listening on port " + responsePort);
});
В любом случае, это на самом деле работает. Когда я перехожу к порту 3000, 'Hello world«меняется на« привет мир из JSONP! »через 2 секунды, что означает, что брат на самом деле получает данные со стороны сервера. Здесь я вижу ответ: ![enter image description here](https://i.stack.imgur.com/Ly6GF.png)
Кажется, нет проблем. Но когда я иду на порт 3001то, что я вижу: ![enter image description here](https://i.stack.imgur.com/t3fT4.png)
Это действительно смутило меня, поскольку в консоли произошла ошибка (и я не могу понять, о чем она говорит) и отображается текстundefined({'message': 'hello world from JSONP!'})
вместо myFunction({'message': 'hello world from JSONP!'})
. Это действительно странно. Я также попытался напечатать req.query.callback
, req
, req.query
. Все они обычно печатаются в терминале. Поэтому в консоли возникает ошибка и почему текст «undefined» вместо имени функции «myFunction»«