我的网络服务器在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我的webservice在端口8000运行,这与IIS运行的不同(端口80)。
我以为我可以通过使用jsonp来解决这个问题(根据jQuery文档here
所以我复制了调用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”。 如何修改代码以正确包装? 感谢您的帮助!
答案 0 :(得分: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);
答案 1 :(得分:0)
如果您尝试使用jsonp
,请确保满足以下条件之一:
$.get
并将dataType
设置为jsonp
。$.getJSON
并添加了callback=?
。