You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取外部JSON对象时持续出现Uncaught SyntaxError错误求助

解决“Uncaught SyntaxError: Unexpected token :”跨域JSON请求问题

我来帮你拆解这个问题,这个错误几乎都是跨域请求的格式不匹配导致的,咱们一步步来解决:

为什么会出现这个错误?

你提到试过JSON和JSONP都不行,核心原因很明确:

  • 用JSONP请求时,后端需要返回回调函数名(你的JSON数据)这种格式(比如myCallback({"status":"success"})),但你的目标接口返回的是纯JSON(比如{"status":"success"})。浏览器会把纯JSON当成JS代码执行,而{ "key": "value" }在JS里不是合法语句,自然会抛出Unexpected token :错误。
  • 用普通JSON请求时,浏览器的同源策略会直接阻止跨域请求,除非后端配置了CORS(跨域资源共享)响应头。

具体解决方案分两种情况

情况1:你能控制后端服务

如果可以修改后端接口逻辑,有两个靠谱的选择:

  1. 让接口支持JSONP:
    修改后端代码,接收callback参数(或你指定的参数名),把返回的JSON包裹在这个回调函数里。比如前端传callback=myFunc,后端就返回myFunc({"你的JSON数据"})。
    对应的jQuery请求代码可以这么写:
    jQuery(document).ready(function(){
        jQuery("#pegar-valor").click(function(){
            var usuario = jQuery("input[name=usuariologin]").val();
            var senha = jQuery("input[name=senhalogin]").val();
            
            jQuery.ajax({
                url: "http://177.54.57.242:8080/ws_VerifSenhaPac_RetJSON",
                data: {
                    aPaciente: usuario,
                    aSenha: senha
                },
                dataType: "jsonp",
                jsonp: "callback", // 告诉后端用这个参数接收回调函数名
                success: function(response){
                    console.log("请求成功:", response);
                    // 这里写你的数据处理逻辑
                },
                error: function(xhr, status, err){
                    console.error("请求出错:", err);
                }
            });
        });
    });
    
  2. 配置CORS跨域允许:
    在后端的响应头里添加Access-Control-Allow-Origin: *(或者指定你的前端域名,更安全),这样前端就可以用普通的JSON请求了:
    jQuery(document).ready(function(){
        jQuery("#pegar-valor").click(function(){
            var usuario = jQuery("input[name=usuariologin]").val();
            var senha = jQuery("input[name=senhalogin]").val();
            
            jQuery.ajax({
                url: "http://177.54.57.242:8080/ws_VerifSenhaPac_RetJSON",
                data: {
                    aPaciente: usuario,
                    aSenha: senha
                },
                dataType: "json",
                success: function(response){
                    console.log("请求成功:", response);
                },
                error: function(xhr, status, err){
                    console.error("请求出错:", err);
                }
            });
        });
    });
    

情况2:你无法控制后端服务

这种情况下,需要用代理服务器中转请求,绕过同源策略。比如用Node.js搭一个简单的代理:

  1. 先安装依赖:npm install express request
  2. 写代理代码(proxy.js):
    const express = require('express');
    const request = require('request');
    const app = express();
    
    // 中转请求的接口
    app.get('/api/verify-password', (req, res) => {
        // 拼接目标接口的URL,带上前端传的参数
        const targetUrl = `http://177.54.57.242:8080/ws_VerifSenhaPac_RetJSON?${req.url.split('?')[1]}`;
        // 转发请求并返回结果
        request(targetUrl).pipe(res);
    });
    
    // 启动代理服务器
    app.listen(3000, () => {
        console.log('代理服务器运行在 http://localhost:3000');
    });
    
  3. 启动代理:node proxy.js
  4. 前端请求代理服务器:
    jQuery(document).ready(function(){
        jQuery("#pegar-valor").click(function(){
            var usuario = jQuery("input[name=usuariologin]").val();
            var senha = jQuery("input[name=senhalogin]").val();
            
            jQuery.ajax({
                url: "http://localhost:3000/api/verify-password",
                data: {
                    aPaciente: usuario,
                    aSenha: senha
                },
                dataType: "json",
                success: function(response){
                    console.log("请求成功:", response);
                },
                error: function(xhr, status, err){
                    console.error("请求出错:", err);
                }
            });
        });
    });
    

额外检查点

  • 先手动访问你的目标接口,确认返回的是合法的JSON格式(可以用JSON校验工具检查)
  • 如果是HTTPS的前端页面,请求HTTP的接口会被浏览器阻止(混合内容限制),需要后端也支持HTTPS或者调整浏览器设置(仅开发环境用)

内容的提问来源于stack exchange,提问作者Alan Alegre da Cunha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:10:17