jsonp跨域报错

前端

$.ajax({
    type: "GET",
    url: "localhost:3000/getData.jsonp",
    dataType: "jsonp",
    success: function(data) {
      console.log(data)
    }
});

node

const Koa = require('koa')
const app = new Koa()
app.use(async(ctx) => {
    console.log(ctx.method);
    ctx.set("Access-Control-Allow-Origin", "*");
    /*星号表示所有的异域请求都可以接受,*/
    ctx.set("Access-Control-Allow-Methods", "GET,POST");
    // 如果jsonp 的请求为GET
    if (ctx.method === 'GET' && ctx.url.split('?')[0] === '/getData.jsonp') {
        console.log(ctx.query)
        // 获取jsonp的callback
        let callbackName = ctx.query.callback || 'callback'
        let returnData = {
            success: true,
            data: {
                text: 'this is a jsonp api',
                time: new Date().getTime(),
            }
        }
        // jsonp的script字符串
        let jsonpStr = `;${callbackName}(${JSON.stringify(returnData)})`
        // 用text/javascript,让请求支持跨域获取
        ctx.type = 'text/javascript'
        // 输出jsonp字符串
        ctx.body = jsonpStr
    } else {
        ctx.body = 'hello jsonp'
    }
})
app.listen(3000, () => {
    console.log('[demo] jsonp is starting at port 3000')
})

浏览器访问报错,控制台里面后台都没打印

图片描述

图片描述

图片描述

node端没打印东西,node里面应该是没走到那里

大神们,请帮助啊

阅读 2.7k
4 个回答

打印一下你的jsonpStr ,看看拼接后的到底是个什么样的吧

jsonp 没有跨域的问题。

ctx.url.split('?')[0] === '/getData.jsonp'这句话能通过?

题主你的请求方式有问题,建议谷歌一下jsonp是怎么请求数据的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题