WCF 跨域使用 Jsonp 错误未捕获语法错误:意外令牌:
Posted
技术标签:
【中文标题】WCF 跨域使用 Jsonp 错误未捕获语法错误:意外令牌:【英文标题】:WCF Cross Domain Using Jsonp Error Uncaught SyntaxError: Unexpected token : 【发布时间】:2013-09-20 05:55:52 【问题描述】:我正在尝试使用 jQuery 跨域调用 web 服务。
这是我调用服务的代码
$(document).ready(function ()
$.ajax(
type: 'GET',
async: false,
contentType: "application/json",
url: "http://localhost:52136/Service1.svc/Helloworld?callback=func_callbk",
dataType: "jsonp",
success: function (data)
alert('sucesss')
alert(data.d);
,
error: function (data)
alert(data);
);
);
func_callback = function (data)
alert(data.data.people[0].id);
我正在从服务返回简单的字符串。
public string HelloWorld()
return "Hello World";
服务被调用,但我收到错误
Uncaught SyntaxError: Unexpected token :
在 Chrome 的控制台窗口中。
我在从浏览器调用服务时得到这个字符串:
"HelloWorldResult":"Hello World"
请让我知道我哪里出错了?
提前致谢。
【问题讨论】:
@DipeshParmar 分号在 javascript 中不是必需的,仅推荐使用。 感谢@DipeshParmar,但它并没有解决问题。 您似乎在请求 jsonp(填充的 json),但从服务器返回一个字符串。您能否显示服务器提供的完整输出?您是否在初始化 javascript 或 ajax 调用后收到错误? 使用 jsonp,你应该看到的是somefunction("HelloWorldResult":"Hello World");
。设置CrossDomainScriptAccessEnabled
Hello @Jite 服务器方法被调用并给出输出 "HelloWorldResult":"Hello World"
【参考方案1】:
您的 WCF 服务器应配置为启用 jsonp
和 CrossDomainScriptAccessEnabled
这是一个简单的工作示例
服务器:
Task.Run(() =>
var uri = new Uri("http://0.0.0.0/test");
var type = typeof(TestService);
WebServiceHost host = new WebServiceHost(type, uri);
WebHttpBinding binding = new WebHttpBinding();
binding.CrossDomainScriptAccessEnabled = true;
host.AddServiceEndpoint(type, binding, uri);
host.Open();
);
[ServiceContract]
public class TestService
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string Hello()
return "Hello World";
这是javascript代码
<html>
<body>
<script src='http://code.jquery.com/jquery-1.10.2.min.js'></script>
<script>
$(document).ready(function ()
$.ajax(
type: 'GET',
async: false,
contentType: "application/json",
url: "http://localhost/test/hello",
dataType: "jsonp",
success: function (data)
alert(data);
,
error: function (data)
alert(data);
);
);
</script>
</body>
</html>
现在您可以通过浏览器对其进行测试
http://localhost/test/hello
和
http://localhost/test/hello?callback=myfunc
【讨论】:
以上是关于WCF 跨域使用 Jsonp 错误未捕获语法错误:意外令牌:的主要内容,如果未能解决你的问题,请参考以下文章
JsonP 返回“未捕获的语法错误:意外的令牌:”AngularJS - routingnumbers.info