web服务调用的同源问题
本文关键字:问题 服务 调用 web | 更新日期: 2023-09-27 18:20:25
我的web服务器在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.起源http://mypc.com访问控制允许来源不允许。
我理解为什么(我认为)b/c我的Web服务运行在8000端口,这与IIS运行的端口(80端口)不同。
我想我可以使用jsonp(根据这里的jQuery文档
所以我复制了一个调用flickrAPI的例子,但它不起作用。有什么想法/建议吗?
更新
好的,所以我的请求现在正在提出:
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"。如何修改代码以正确包装它?感谢迄今为止的帮助!
如果使用jsonp,则必须修改服务器的响应,以便将json数据封装在回调查询字符串参数指定的方法中。
因此,如果您的服务器返回类似以下内容:
["test1", test2]
它将变成:
callback(["test1", "test2"]);
其中"回调"由jquery在您的"webservice"的查询字符串中指定
编辑:给定您的示例代码,我认为您需要手动序列化和包装您的响应。MVC有一个Jsonp-helper方法,我在.NET4WCF中看到报告称,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)
如果您尝试使用jsonp
,请确保以下情况之一:
- 如果使用的是
$.get
,则将dataType
设置为jsonp
- 如果您使用的是
$.getJSON
,并且URL中包含了callback=?