我是JavaScript新手,我有一个问题让我苦不堪言。WCF javascript调用跨域
我想在页面中放入一个跟踪javascript。该脚本将调用wcf服务来跟踪客户端浏览器信息,页面访问时间和时间戳。问题是我得到:JavaScript调用时出现“405方法不允许”错误。该服务将在另一个域上。现在我在localhost上测试这个。该服务工作正常,因为我可以从浏览器中的新页面调用它。你遇到过同样的问题吗?我怎样才能解决这个问题?
我的JavaScript代码是:
WCF服务代码:
[ServiceContract(Name = "CustomersAssistantService", Namespace = "CustomersAssistantService")]
public interface ICustomersAssistantService
{
[OperationContract]
[WebGet]
string DoWork();
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
string Sum(int n1, int n2);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CustomersAssistantService : ICustomersAssistantService
{
public string DoWork()
{
return "work done";
}
public string Sum(int n1, int n2)
{
return (n1 + n2).ToString();
}
}
JavaScript调用:
function CallWcf1(){
var _I = this;
var url = "http://localhost:58399/CustomersAssistantService.svc/customersAssistantService/";
var methodUrl = _I.serviceUrl + 'dowork';
$.ajax({
url: methodUrl,
data: '',
type: "GET",
processData: false,
contentType: "application/json",
timeout: 10000,
dataType: "text", // not "json" we'll parse
success:
function(res)
{
if (!callback) return;
// *** Use json library so we can fix up MS AJAX dates
var result = JSON2.parse(res);
// *** Bare message IS result
if (bare)
{ callback(result); return; }
// *** Wrapped message contains top level object node
// *** strip it off
for(var property in result)
{
callback(result[property]);
break;
}
},
error:
function(xhr)
{
if (!error) return;
if (xhr.responseText)
{
var err = JSON2.parse(xhr.responseText);
if (err)
error(err);
else
error({ Message: "Unknown server error." })
}
return;
}
});
}
难道我做错了什么?
非常感谢,拉杜d
你知道Google跟踪代码的工作原理吗?我假设它打电话给一个服务来跟踪信息。 – 2011-05-04 08:24:45
@Radu:我刚刚添加了一些要点,以便你如何处理这个问题。 Google使用第三个('script'元素)。 – 2011-05-04 08:26:05
非常感谢。你救了我的一天:) – 2011-05-04 11:13:36