2016-11-25 40 views
0

我有发送一个XMLHttpRequest来一个JsonService麻烦。 当我通过谷歌浏览器进入链接时,它正在工作。 当我使用这个命令铬(https://i.imgur.com/UxAd8oe.png)它也在努力。但是我需要让它在没有这些课程的情况下工作。 这是我的XmlHttpRequest:XMLHttpRequest来JsonService失败

jQuery(document).ready(function() { 
     $("#btnSendEmail").click(function() { 

      var message = new Model.Message(); 
      message.From = document.getElementById("txtEmail").value; 
      message.Subject = "Contact Formulier: " + document.getElementById("txtSubject").value; 
      message.Html = "Telefoon: " + document.getElementById("txtTelephone").value + "<br/>" + 
       "Bedrijf: " + document.getElementById("txtCompany").value + "<br/><br/>" + 
       "Bericht: " + "<br/>" + 
       document.getElementById("txtMessage").value; 
      message.Recipients = []; 
      var recipient = new Model.Recipient(); 
      recipient.Email = "[email protected]"; 
      recipient.Name = "Pieter Borgmans"; 
      recipient.Type = "To"; 
      message.Recipients.push(recipient); 

      var params = JSON.stringify(message); 
      var url = "http://localhost:26294/JsonService.svc/Test"; 

      var xhr = new XMLHttpRequest(); 
      xhr.open("GET", url, true); 
      xhr.contentType = "application/json; charset=utf-8"; 
      xhr.setRequestHeader("Content-Type", "application/json"); 
      xhr.onload = function() { 
       if (this.status === 200) { 
        var response = (this.responseText) ? JSON.parse(this.responseText) : this.responseText; 
        $("#lblSendMailMessage").text = response; 
       } else { 
        $("#lblSendMailMessage").text = xhr.status + ": " + xhr.statusText; 
       } 
      }; 
      xhr.onerror = function (onErrorArgs) { 
       $("#lblSendMailMessage").text = "Error"; 
      }; 
      xhr.send(); 
     }); 
    }); 

代码在我的服务接口:

[ServiceContract] 
public partial interface IBusinessManager 
{ 

    [OperationContract] 
    [FaultContract(typeof (ServiceFault))] 
    [WebGet(
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.WrappedRequest, 
     UriTemplate = "Test")] 
    string Test(); 
} 

而且我在web.config中添加以下代码:

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="Accept, Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control" /> 
    <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS, TRACE, HEAD" /> 
    <add name="Access-Control-Max-Age" value="1000" /> 
    </customHeaders> 
</httpProtocol> 

任何人有一个主意?

谢谢!

+0

究竟不能按预期工作,它应该如何工作? – victor175

+0

由于您已经在使用jQuery,为什么直接使用'XmlHttpRequest'?您可以使用[jQuery.get()](https://api.jquery.com/get/),并保存自己很多的麻烦,再加上挂接到它的成功/错误处理程序,方便调试。 –

+0

这是我收到错误消息:XMLHttpRequest的无法加载的http://本地主机:26294/JsonService.svc /测试。预检响应具有无效的HTTP状态码405 当我检查我的网络选项卡上,我可以看到,这正显示出我的要求: 请求URL:http://本地主机:26294/JsonService.svc /测试 请求方法:OPTIONS 状态代码:405不允许的方法 远程地址:[:: 1]:26294 正如你可以看到有一个错误在与挂钩的onload还是你的意思是别的东西? –

回答

0

我把在Global.asax文件中的自定义页眉从我的web服务,而不是我的web.config &它的工作。

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 
     if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
     { 
      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, TRACE, HEAD"); 
      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Accept, Accept-Encoding, Accept-Language, Host, Referer, Origin, Connection, User-Agent, Access-Control-Request-Method, Access-Control-Request-Headers, Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers, Access-Control-Max-Age, Content-Type"); 
      HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
      HttpContext.Current.Response.End(); 
     } 
    } 
相关问题