2013-05-22 71 views
10

我正在进行跨域ajax请求来获取一些数据。 REST服务有Basic authentication(通过IIS设置)。跨域ajax请求基本认证

$.ajax({ 
      type: "GET", 
      xhrFields: { 
       withCredentials: true 
      }, 
      dataType: "jsonp", 
      contentType: "application/javascript", 
      data: myData, 
      async: false, 
      crossDomain: true, 
      url: "http://xx.xx.xx.xx/MyService/MyService.svc/GetData", 
      success: function (jsonData) { 
       console.log(jsonData); 
      }, 
      error: function (request, textStatus, errorThrown) { 
       console.log(request.responseText); 
       console.log(textStatus); 
       console.log(errorThrown); 
      } 
     }); 

当我提出这个要求,它会提示我输入凭据&我必须手动输入凭据获得响应。我们可以通过请求本身发送这些凭据吗?

回答

5

通行证用户名和像下面的代码密码,

$.ajax({ 
    type: "GET", 
    xhrFields: { 
     withCredentials: true 
    }, 
    dataType: "jsonp", 
    contentType: "application/javascript", 
    data: myData, 
    async: false, 
    crossDomain: true, 
    url: "http://xx.xx.xx.xx/MyService/MyService.svc/GetData", 
    success: function (jsonData) { 
     console.log(jsonData); 
    }, 
    error: function (request, textStatus, errorThrown) { 
     console.log(request.responseText); 
     console.log(textStatus); 
     console.log(errorThrown); 
    } 
    username: username, 
    password: password, 
}); 
4
$.ajax({ 
    url: 'yoururl', 
    username : username, 
    password :password, 
    type: 'POST', 
    contentType: 'application/x-www-form-urlencoded', 
    dataType: "text", 
    xhrFields: 
    { 
     withCredentials: true 
    }, 
    beforeSend: function (xhr) { 
     xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ":" + password));    
    } 
}); 
+2

我并不对此感到兴奋的答案,这里的原因:它是多余的(问题被回答了为期半年的更早),它是多余的(jQuery为你处理auth的东西,AFAICT)。如果我对后者有错,请编辑答案,我将删除此评论。 –

+0

使用beforeSend属性为我工作,因为用户名和密码由于某种原因没有添加授权标头。以防万一它帮助任何人。 – rodrigobartels