【问题标题】:WCF Cross Domain Using Jsonp Error Uncaught SyntaxError: Unexpected token :WCF 跨域使用 Jsonp 错误未捕获语法错误:意外令牌:
【发布时间】: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"}

标签: jquery .net wcf rest jsonp


【解决方案1】:

您的 WCF 服务器应配置为启用 jsonpCrossDomainScriptAccessEnabled

这是一个简单的工作示例

服务器:

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

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 2011-11-09
    • 2016-10-09
    • 1970-01-01
    • 2014-05-27
    • 2014-04-30
    • 2015-09-07
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多