gpt4 book ai didi

javascript - "Uncaught SyntaxError: Unexpected token"解析jsonp时

转载 作者:行者123 更新时间:2023-11-30 17:15:32 28 4
gpt4 key购买 nike

我在 ASP.NET 中创建了一个 json 网络服务。

URL http://mydomain:21130/JSONdata.aspx?Option=GetListRootMenus

数据返回:

{"NumberOfMenu":"2", "Menus":[{"MenuKey":"menu_home", "MenuLevel":"1" },{"MenuKey":"menu_info", "MenuLevel":"1" }]}

之后,我通过JSONP解析

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.getJSON demo</title>
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p> this is a param </p>
<script>
$(document).ready(function(){
console.log("zc");
$.ajax({
dataType: "jsonp",
type: 'GET',
url: "http://mydomain:21130/JSONdata.aspx?Option=GetListRootMenus&callback=?",
success: function(data) {
console.log("123");
},
error: function(){
console.log("456");
}
});
});
</script>
</body>
</html>

但是错了。我不知道为什么 :( enter image description here

最佳答案

正如我在评论中解释的那样,您的服务返回 JSON,而 jQuery 需要 JSONP。这是一个问题,因为响应将被评估为 JavaScript,但您没有发回有效的 JavaScript。

由于您可以控制服务器,因此您有三种可能的解决方案:

1。告诉 jQuery 期待 JSON

如果不存在跨域问题,因为站点本身也由该域提供服务,只需让 jQuery 发出真正的 Ajax 请求,方法是将 dataType 更改为 json 并从 URL 中删除 callback=?

2。启用 CORS(并告诉 jQuery 期待 JSON)

如果存在跨域问题,你仍然可以按照我在第一个解决方案中所说的进行,但是另外,在你的服务器上启用CORS。简而言之,这允许其他站点向您的服务器发出 Ajax 请求。查看 http://enable-cors.org/ 以了解如何为您的服务器启用它。

3。返回JSONP

JSONP 就是动态地包含 JavaScript。这适用于跨域,因为 <script> 元素没有 Ajax 具有的同源限制。但是,它仍然是服务器必须支持的东西,因为它必须返回有效的 JSON。如果您的 JSON 响应是

{"foo": 42}

那么 JSONP 响应将是

func({"foo": 42});

此示例中的函数名称 ( func ) 取自一些您可以任意选择的 GET 参数,但最常见的是 callback 。 jQuery 实际上会选择一个随机的函数名称,所以它会发送类似

的内容
callback=jQuery123135343456456

您的服务必须采用该值并将其用作 JSONP 的函数名称,即

jQuery123135343456456({"foo": 42});

另见

关于javascript - "Uncaught SyntaxError: Unexpected token"解析jsonp时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26196820/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com