我有一个与服务对话的RESTful Web服务和jquery插件。域名是不同的所以我已经实现了JSONP,一切正常。
我正在进行一些更改并将我的测试客户端和测试服务托管到localhost上,但我的JSONP回调不再被调用。
这是我的jquery电话。
var urlbase = 'http://localhost:8080';
$.getJSON(urlbase + '/Geography/Countries?callback=?', function (results) {
alert(results);
// populate the country lookup
$.each(results, function (key, value) {
$('select#countrylookup')
.append($('<option></option>')
.attr('value', value.Code)
.text(value.Name));
});
我知道正在调用服务并返回结果,因为我的服务断点正在被点击,我可以在fiddler / F12工具中看到请求/响应。
如果(我怀疑)我需要用于“本地域”的JSON和用于跨域的JSONP,其他人在测试时会采用什么策略?显然我不想在任何地方使用任何if(domain == local)样式代码。
答案 0 :(得分:1)
getJSON
方法将确定它是否是来自网址的跨域调用,因此您无法使用它来对同一域进行JSONP调用。使用ajax
方法,以便您可以使用crossDomain
属性指定它应该使用JSONP:
$.ajax({
url: urlbase + '/Geography/Countries?callback=?',
cache: false,
crossDomain: true,
success: function (results) {
alert(results);
// populate the country lookup
$.each(results, function (key, value) {
$('select#countrylookup')
.append($('<option></option>')
.attr('value', value.Code)
.text(value.Name));
});
}
});
答案 1 :(得分:0)
更新:原来我的问题在于VS2010网络服务器。如果我在本地IIS中托管该站点没有任何问题。甚至使用原始的getJSON。
我现在已经运行了几天,似乎一切都很好。我在最初的问题中从未提及过我可能应该使用的VS2010和WebDev.WebServer40.exe。
回答实际问题:是的,您可以在localhost上使用JSONP。