我有一个ASP.NET服务,我可以从asxh文件访问,该文件返回一个JSON字符串。该服务非常有效,除非从我们位于单独服务器上的博客子域访问。 (blog.laptopmag.com)
这是我的jQuery
$.ajax({
type: "GET",
url: "http://www.laptopmag.com/scripts/service.ashx",
data: { "op": "get_products" },
dataType: "json",
success: function (data) {
alert(data);
}
});
这是我的ashx文件
public class service : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string jsonStr = "{}";
string op = context.Request["op"];
// Process request
context.Response.ContentType = "application/json";
context.Response.Write(jsonStr);
}
public bool IsReusable {
get {
return false;
}
}
}
我已经尝试过切换到jsonp请求,但一定是做错了,因为我无法收回任何东西。这是我尝试过的。
这是我的jsonp尝试,当从blog.laptopmag.com调用时似乎不起作用
$.getJSON('http://www.laptopmag.com/scripts/service.ashx?callback=ProcessRequest&op=get_products', function(json) {
console.log(json);
});
答案 0 :(得分:1)
好的,我通过以下帖子弄清楚我的JSONP请求出了什么问题: Jquery success function not firing using JSONP
问题是请求没有得到预期格式的回复。
现在,我的ashx文件现在看起来像这样:
public void ProcessRequest (HttpContext context) {
string jsonStr = "{}";
string op = context.Request["op"];
string jsonp = context.Request["callback"];
// Do something here
if (!String.IsNullOrEmpty(jsonp))
{
jsonStr = jsonp + "(" + jsonStr + ")";
}
context.Response.ContentType = "application/json";
context.Response.Write(jsonStr);
}
并且jQuery ajax请求如下所示:
$.getJSON('http://www.laptopmag.com/scripts/service.ashx?callback=?&op=get_products', function(json) {
console.log(json);
});
答案 1 :(得分:0)
安全限制阻止您进行跨域jquery ajax调用,但有一些解决方法。 IMO最简单的方法是在您的站点上创建一个充当代理的页面,并使用您的jquery请求命中该页面。在您的代理的page_load中:
WebClient client = new WebClient ();
Response.Write (client.DownloadString ("your-webservice-url"));
可以找到其他解决方案