0
$.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 );
       }
   });

常にエラーブロックになります。別のポート(同じドメイン)にAJAX呼び出しを行っています。

しかし、新しいタブで同じURLをヒットしようとすると。応答を見ることができます。

どんな助けでも非常に高く評価されます。

4

2 に答える 2

3

Gaurav Agrawalが提案したようにJSONPを使用するか、ajaxリクエストを受信するサイトに対してAccess-Control-Allow-Originを有効にすることができます。

Ajaxは次のように機能します:同じドメインですが、異なるポート=異なるドメイン

ajaxターゲットサーバーでasp.netを使用している場合は、web.configにこれを追加してアクセス制御を有効にできます。

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

そして、あなた自身に賛成して、「*」をあなたのサイトのURLに置き換えてください!

状況によっては、これらのキーも必要になる場合があります。追加する前に、すべての関数をグーグルで検索してください。

<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Expose-Headers" value="*"/>
于 2013-03-11T11:24:11.143 に答える
2

JSONを使用してクロスドメインAJAX呼び出しを行うことはできません。JSONPを使用する必要があります。したがって、コントローラーアクションから通常のJsonResultを返す代わりに、パラメーターとして渡されるコールバックでJSONをラップするカスタムアクション結果を記述します。

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);
}

これで、このアクションをクロスドメインで使用できます。

var url = "http://example.com/SomeController/SomeAction/";
$.getJSON(url + '?callback=?', function (data) {
    alert(data);
});
于 2013-03-11T11:17:27.853 に答える