0

我的网络服务器运行在http://mypc.com:80 `

鉴于以下片段:

$(window).load(function () {
    var myURL = "http://mypc.com:8000/PSOCharts/service/HighChart_ColumnChart/i";


    $.getJSON(myURL)
        .done(function(data) {alert(data);});

    });

我遇到了这个错误:

XMLHttpRequest 无法加载http://mypc.com:8000/PSOCharts/service/HighChart_ColumnChart/i。Access-Control-Allow-Origin 不允许来源http://mypc.com 。

我理解为什么(我认为)b/c 我的 web 服务在端口 8000 上运行,这与 IIS 在(端口 80)上运行的不同。

我想我可以通过使用 jsonp 来解决(根据这里的 jQuery 文档

所以我复制了调用 flickr api 的示例,但它不起作用。有什么想法/建议吗?

更新

好的,我的请求现在正在提出:

var myURL = "http://192.168.1.104:8000/PSOCharts/service/HighChart_ColumnChart/i?jsoncallback=?";

    $.ajax({
        url :myURL,
        dataType: "jsonp",
        success: function(data) {a(data)} ,
        error: function(){alert("err");},
        });

但我不断地点击错误功能,这是返回的内容:

[1.4,54.43,49.39,93.23]

现在我假设这是 b/c 响应文本不包含任何类型的回调

这是我正在调用的界面的一部分:

 [WebInvoke(Method = "GET",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "HighChart_ColumnChart/{id}?callback={cb}")]
    List<double> HighChart_ColumnChart(string id,string cb);

这是被调用的实际函数:

  public List<double> HighChart_ColumnChart(string id,string cb)
    {
        var z = new List<double>();
        z.Add(1.4);
        z.Add(54.43);
        z.Add(49.39);
        z.Add(93.23);
        return z;
    }

当我调试时,CB 参数类似于:“jQuery19108121746340766549_1372630643878”。如何修改代码以正确包装它?感谢您迄今为止的帮助!

4

2 回答 2

0

如果您使用的是 jsonp,则必须修改来自服务器的响应以将 json 数据包装在回调查询字符串参数指定的方法中。

因此,如果您的服务器返回如下内容:

["test1", test2]

它会变成:

callback(["test1", "test2"]);

其中“回调”由 jquery 在查询字符串中指定到您的“webservice”

编辑:鉴于您的示例代码,我认为您将需要手动序列化和包装您的响应。MVC 有一个 Jsonp 辅助方法,我看到在 .NET4 中 WCF 会根据存在的回调参数为您执行此操作,但如果这不起作用,则在您的方法末尾添加类似以下内容。

JavaScriptSerializer s = new JavaScriptSerializer();
    string jsonString = s.Serialize(z);

    return WebOperationContext.Current.CreateTextResponse(string.Format("{0}({1});", cb, jsonString), "application/json; charset=utf-8", Encoding.UTF8);

(从这里修改:使用 JQuery 和 WCF 连接 JSONP

于 2013-06-30T21:19:15.237 回答
0

如果您尝试使用jsonp,请确保以下情况之一:

  • 如果您正在使用$.get并设置dataTypejsonp.
  • 如果您正在使用$.getJSON并包含callback=?在 URL 中。
于 2013-06-30T21:21:25.687 回答