【问题标题】:Ajax crossdomain request with jquery使用 jquery 的 Ajax 跨域请求
【发布时间】:2012-08-31 18:32:03
【问题描述】:

我尝试使用 $.ajax() 调用外部域并且它工作正常,服务器接收到调用,但是 jquery.js 行 7760 中的 firebug 错误的响应。我一直在打我的头整天都在做这件事,感觉我没有做得更进一步。

$.ajax({
            type: "GET",
            url: "http://admin:asdfg@149.50.143.241:81/stream.jpg",
            //data: {},
            //async: true,
            //contentType: "application/jsonp; charset=utf-8",
            //headers: {
            //    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5',
            //    'Accept': '*/*',
            //    'Authorization': 'Basic ' + auth
            //},
            //timeout: 500,
            dataType: "jsonp",
            //crossDomain: true,
            beforeSend: function (req) {
                req.setRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5');
                req.setRequestHeader('Accept', '*/*');
                req.setRequestHeader('Authorization', 'Basic ' + auth);
            },
            success: function (data) {
                alert("Success");
            }
        });

【问题讨论】:

  • jsonp 不支持success
  • @diEcho,能否请您发送一个链接以支持您的信息
  • 阅读jquery ajax中的jsonp
  • @diEcho,我已经读过了。它说 error 处理程序没有被调用。但是对于success 回调没有提及。请重新检查并发布。

标签: javascript jquery


【解决方案1】:

jsonp 响应必须包含在 javascript 方法调用中。 (回调方法)。

假设响应是图像。 jquery 似乎不太可能处理它。

【讨论】:

    【解决方案2】:

    不知道能不能用ajax调用来调用图片。

    当您使用 jsonp 时,ajax 调用的 beforeSend 将被忽略。

    也许你必须让你的服务器知道并响应 CORS。

    类似这样的:

        protected override void OnStartProcessingRequest(ProcessRequestArgs args)
        {
            HttpContext context = HttpContext.Current;    // set cache policy to this page 
    
            context.Response.AddHeader("Access-Control-Allow-Origin", "*");
            if (context.Request.HttpMethod == "OPTIONS")
            {
                context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
                context.Response.AddHeader("Access-Control-Allow-Headers", "X-Requested-With, Accept");
                context.Response.AddHeader("Access-Control-Max-Age", "3628800");
                context.Response.AddHeader("type", "application/json; charset=utf-8");
                context.Response.End();
            }
        }
    

    并使用 XDomainRequest 和 XMLHttpResquest 在客户端进行调用。

    看这里:http://andre-pedroso.blogspot.pt/2011/02/javascript-consume-service-with-cross.html

    干杯

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 2010-10-19
      • 2013-06-15
      • 1970-01-01
      • 2012-07-29
      • 2016-10-02
      • 2011-12-24
      相关资源
      最近更新 更多