追梦小狂魔 2021-11-20 20:54 采纳率: 16.7%
浏览 33
已结题

ajax跨域无法设置同步,没办法把success的数据传递出来

问题遇到的现象和发生背景

我想把多个翻译的数据弄成数组

问题相关代码,请勿粘贴截图
<script type="text/javascript">
    function fanyi(query) {
//这个需要保密
        var appid = 'xxxx';
        var key = 'lxxxxd';
        var salt = (new Date).getTime();
        var query = query;
        // 多个query可以用\n连接  如 query='apple\norange\nbanana\npear'
        var from = 'en';
        var to = 'zh';
        var str1 = appid + query + salt + key;
        var sign = MD5(str1);
        var mydata
        $.ajax({
            url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',
            type: 'get',
            dataType: 'jsonp',
            async: false, //跨域同步没有用
            data: {
                q: query,
                appid: appid,
                salt: salt,
                from: from,
                to: to,
                sign: sign
            },
            success: function(res) {
                console.log(res);
                mydata = res
                    // 这个data传不出去,没有返回值
            }
        })
        return mydata
    }
    // 后端参数
    var d = '{{ data | safe}}';
    // console.log(JSON.parse(d));
    data = JSON.parse(d)
    if (data.status == 200) {
        var text_list = data.text_list
            // 就是传递了一个apple的单词翻译,我想得到返回值,这里拿不到
        var aa = fanyi(text_list[0]);
        console.log(aa);


    }
</script>

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

如果是同步的也可以通过全局变量拿出来,查了一些资料都是说不能够同步

我想要达到的结果

得到返回值就可以了

  • 写回答

1条回答 默认 最新

  • CSDN专家-showbo 2021-11-20 21:05
    关注

    通过回调的形式来获取数据

    <script type="text/javascript">
        function fanyi(query,callback) {//新增回调参数
    //这个需要保密
            var appid = 'xxxx';
            var key = 'lxxxxd';
            var salt = (new Date).getTime();
            var query = query;
            // 多个query可以用\n连接  如 query='apple\norange\nbanana\npear'
            var from = 'en';
            var to = 'zh';
            var str1 = appid + query + salt + key;
            var sign = MD5(str1);
            var mydata
            $.ajax({
                url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',
                type: 'get',
                dataType: 'jsonp',
                async: false, //跨域同步没有用
                data: {
                    q: query,
                    appid: appid,
                    salt: salt,
                    from: from,
                    to: to,
                    sign: sign
                },
                success: function(res) {
                    console.log(res);
                    mydata = res
                    callback(mydata)/////////执行回调函数传递数据
                }
            })
            return mydata
        }
        // 后端参数
        var d = '{{ data | safe}}';
        // console.log(JSON.parse(d));
        data = JSON.parse(d)
        if (data.status == 200) {
            var text_list = data.text_list
            // 就是传递了一个apple的单词翻译,我想得到返回值,这里拿不到
            fanyi(text_list[0], function (aa) {
                console.log(aa);///////////////
                //后续的操作放这里
            });
    
    
        }
    </script>
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月29日
  • 已采纳回答 11月21日
  • 创建了问题 11月20日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度