0

我有 2 台服务器安装了不同版本的 .NET。服务器 1 具有 .NET 1.1,服务器 2 具有 .NET 3.5。

我在 .NET 3.5 服务器上有一个 web 服务,以下工作正常:

function selectedDateTime(strDate, strHours, strMinutes) {

    $.ajax({
        url: 'webservice.asmx/GetCount',
        type: 'POST',
        data: '{strMeetingDate: "' + strDate + ' ' + strHours + ':' + strMinutes + ':00"}',
        contentType: 'application/json; charset=utf-8',
        dataType: 'jsonp',
        success: function(department) {
            console.log("success: " + department.d); 
        },
        error: function(xhr, status, error) {
            console.log("status message: " + status);
            console.log("error message: " + error);
            console.log("xhr message: " + xhr.responseText);

        }
    });

}

$("#btnTest").click(function(event) {
    selectedDateTime("01/07/2013", "13", "00");
});

我也想在旧的 .NET 1.1 服务器上使用相同的脚本,但不能将 web 服务移动到旧服务器,因为它是使用 .NET 3.5 编写的,所以当我尝试时它只是给出了很多错误消息。

所以我想我应该把上面的 html/javascript 移到旧服务器上,并告诉它指向新服务器上的 web 服务:

我做到了,并稍微更改了上面的脚本以指向新服务器:

url: 'http://server2/webservice.asmx/GetCount',

它给出了以下信息:

http://server2/webservice.asmx/GetDayCount 401 (Unauthorized) 
http://server2/webservice.asmx/GetDayCount Origin http://server1 is not allowed by Access-Control-Allow-Origin. 
XMLHttpRequest cannot load http://server2/webservice.asmx/GetDayCount. Origin http://intranet is not allowed by Access-Control-Allow-Origin. 

所以我再次更改了上面的脚本,将json位更改为jsonp,因为我认为 jsonp 允许跨域?

dataType: 'jsonp',

但这也没有解决问题,我现在得到:

GET http://server2/webservice.asmx/GetCount?callback=jQuery…2680346152&{strMeetingDate:%20%2201/07/2013%2013:00:00%22}&_=1372680346153 500 (Internal Server Error) 

任何人都知道为什么这不起作用,因为当两个文件一起在同一台服务器上时,Web 服务和脚本显然可以在新服务器上运行。

4

1 回答 1

1

看看这个话题。

It is not possible to do an asynchronous POST to a service on another domain, due to the (quite sensible) limitation of the same origin policy. JSON-P only works because you're allowed to insert <script> tags into the DOM, and they can point anywhere.

关于jsonp 的工作原理

于 2013-07-01T12:14:26.080 回答