跨域AJAX请求JSON数据报错:原URL问题排查咨询
你的跨域AJAX调用失败原因解析
嘿,我来帮你捋清楚这个问题——你的代码本身写法没大问题,核心问题出在目标服务器不支持JSONP协议,咱们一步步拆解:
先搞懂JSONP的核心要求
JSONP不是传统意义上的AJAX,它是靠动态加载<script>标签绕开跨域限制的,这就要求服务器必须能识别callback参数,并且把返回的JSON数据包裹在这个callback指定的函数里返回。举个例子,你请求json_url_1带了callback=parseResponse,正常的JSONP响应得是这样的:
parseResponse({"test": "data", ...})
但你用的那个operation-wigwam.ingress.com:8080服务器明显没做这个处理——它返回的是纯JSON字符串,不是包裹在函数里的合法JS代码,浏览器自然没法解析,直接触发error回调。
对比你成功的示例地址
你用的jsonplaceholder.typicode.com是专门做测试用的服务,它天生支持JSONP:只要你带callback参数过去,它就自动把JSON包装成函数调用返回,所以你的AJAX能顺利拿到数据。
再看你两个真实请求的具体问题
- json_url_1:虽然加了
callback=parseResponse,但服务器完全不理这个参数,返回的还是纯JSON,浏览器加载这个script内容时,因为不是合法的函数执行代码,直接报错。 - json_url_2:连
callback参数都没加,服务器直接返回纯JSON,更不符合JSONP的要求,肯定失败。
给你的解决方向
如果非要用这个服务器的接口,有两个路子:
- 找服务器开发同学,让他们加上JSONP支持,也就是处理请求里的
callback参数,把返回的JSON包成函数调用格式。 - 如果服务器支持CORS(跨域资源共享),你可以把
dataType改成json,然后根据服务器配置调整withCredentials参数,但前提是服务器已经配置了正确的CORS响应头(比如Access-Control-Allow-Origin)。
对了,JSONP本身只支持GET请求,这部分你的代码是对的,不用改~
内容的提问来源于stack exchange,提问作者svebal
相关产品推荐
相关产品推荐

