Javascript 跨域AJAX调用?

Javascript 跨域AJAX调用?,javascript,cross-domain,jsonp,Javascript,Cross Domain,Jsonp,它总是在错误块中运行。我正在对不同的端口(相同的域)进行AJAX调用 但当我尝试在新标签中点击相同的URL时。我能看到反应 我们将非常感谢您的帮助。您不能使用JSON进行跨域AJAX调用。您需要使用JSONP。因此,不要从控制器操作返回常规JsonResult,而是编写一个自定义操作结果,将JSON封装在作为参数传递的回调中: $.ajax({ url: 'https://XXXXX.desktop.XXXX.com:9011/iws-merchant/XXXXX.htm',

它总是在错误块中运行。我正在对不同的端口(相同的域)进行AJAX调用

但当我尝试在新标签中点击相同的URL时。我能看到反应


我们将非常感谢您的帮助。

您不能使用JSON进行跨域AJAX调用。您需要使用JSONP。因此,不要从控制器操作返回常规JsonResult,而是编写一个自定义操作结果,将JSON封装在作为参数传递的回调中:

$.ajax({

      url: 'https://XXXXX.desktop.XXXX.com:9011/iws-merchant/XXXXX.htm',
      dataType: "jsonp",
      success: function (response) {
       str=response;

      },
      error: function( response ) {
          alert( "ERROR:  " + JSON.stringify );
       }
   });
然后让控制器操作返回此自定义操作结果:

public class JsonpResult : ActionResult
{
    private readonly object _obj;

    public JsonpResult(object obj)
    {
        _obj = obj;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var serializer = new JavaScriptSerializer();
        var callbackname = context.HttpContext.Request["callback"];
        var jsonp = string.Format("{0}({1})", callbackname, serializer.Serialize(_obj));
        var response = context.HttpContext.Response;
        response.ContentType = "application/json";
        response.Write(jsonp);
    }
}
现在您可以跨域使用此操作:

public ActionResult SomeAction()
{
    var result = new[]
    {
        new { Id = 1, Name = "item 1" },
        new { Id = 2, Name = "item 2" },
        new { Id = 3, Name = "item 3" },
    };
    return new JsonpResult(balances);
}

不能使用JSON进行跨域AJAX调用。您需要使用JSONP。因此,不要从控制器操作返回常规JsonResult,而是编写一个自定义操作结果,将JSON封装在作为参数传递的回调中:

$.ajax({

      url: 'https://XXXXX.desktop.XXXX.com:9011/iws-merchant/XXXXX.htm',
      dataType: "jsonp",
      success: function (response) {
       str=response;

      },
      error: function( response ) {
          alert( "ERROR:  " + JSON.stringify );
       }
   });
然后让控制器操作返回此自定义操作结果:

public class JsonpResult : ActionResult
{
    private readonly object _obj;

    public JsonpResult(object obj)
    {
        _obj = obj;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var serializer = new JavaScriptSerializer();
        var callbackname = context.HttpContext.Request["callback"];
        var jsonp = string.Format("{0}({1})", callbackname, serializer.Serialize(_obj));
        var response = context.HttpContext.Response;
        response.ContentType = "application/json";
        response.Write(jsonp);
    }
}
现在您可以跨域使用此操作:

public ActionResult SomeAction()
{
    var result = new[]
    {
        new { Id = 1, Name = "item 1" },
        new { Id = 2, Name = "item 2" },
        new { Id = 3, Name = "item 3" },
    };
    return new JsonpResult(balances);
}

您可以按照Gaurav Agrawal的建议使用JSONP,也可以为接收ajax请求的站点启用访问控制Allow Origin

Ajax的工作原理如下: 相同域但不同端口=不同域

如果在ajax目标服务器上使用asp.net,则可以启用访问控制,并将其添加到web.config中:

var url = "http://example.com/SomeController/SomeAction/";
$.getJSON(url + '?callback=?', function (data) {
    alert(data);
});

帮你自己一个忙,用你的网站url替换“*”

在某些情况下,您甚至需要这些键,只需在添加之前搜索每个函数

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
<system.webServer>

您可以按照Gaurav Agrawal的建议使用JSONP,也可以为接收ajax请求的站点启用访问控制允许源站

Ajax的工作原理如下: 相同域但不同端口=不同域

如果在ajax目标服务器上使用asp.net,则可以启用访问控制,并将其添加到web.config中:

var url = "http://example.com/SomeController/SomeAction/";
$.getJSON(url + '?callback=?', function (data) {
    alert(data);
});

帮你自己一个忙,用你的网站url替换“*”

在某些情况下,您甚至需要这些键,只需在添加之前搜索每个函数

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
<system.webServer>


域、协议和端口必须匹配。否则,请求将受SOP限制。服务器是否正确设置以返回JSONP响应?在您的示例中,由于您没有指定回调参数,发送到服务器的GET参数将被称为“callback”。因此,我们可以在错误块中使用JSONP ryt?顺便说一句,JSON.stringify本身不会做任何事情……我假设这只是一个类型错误:“JSONP”对我来说可以吗ryt?当响应成功时,它将成功处理。域、协议和端口必须匹配。否则,请求将受SOP限制。服务器是否正确设置以返回JSONP响应?在您的示例中,由于您没有指定回调参数,发送到服务器的GET参数将被称为“callback”。因此,我们可以在错误块中使用JSONP ryt?顺便说一句,JSON.stringify本身不会做任何事情……我假设这只是一个类型错误:“JSONP”对我来说可以吗ryt?当响应成功时,它将进入成功处理程序。