跨域使用jQuery访问ashx服务

时间:2011-10-07 17:05:31

标签: asp.net jquery

我有一个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);
  });

2 个答案:

答案 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"));

quick Google search.

可以找到其他解决方案