Почему серверная сторона не вернула правильный оператор вызова функции при запуске демонстрации перекрестного происхождения JSONP? - PullRequest
0 голосов
/ 08 ноября 2019

Так что я просто запускаю демо , чтобы узнать о перекрестном происхождении 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

Кажется, нет проблем. Но когда я иду на порт 3001то, что я вижу: enter image description here

Это действительно смутило меня, поскольку в консоли произошла ошибка (и я не могу понять, о чем она говорит) и отображается текстundefined({'message': 'hello world from JSONP!'}) вместо myFunction({'message': 'hello world from JSONP!'}). Это действительно странно. Я также попытался напечатать req.query.callback, req, req.query. Все они обычно печатаются в терминале. Поэтому в консоли возникает ошибка и почему текст «undefined» вместо имени функции «myFunction»«

...