Javascript 如何避免从jQueryAjax调用WCF服务时出现弹出式登录

Javascript 如何避免从jQueryAjax调用WCF服务时出现弹出式登录,javascript,wcf,jquery,iis-7,basic-authentication,Javascript,Wcf,Jquery,Iis 7,Basic Authentication,朋友们, 我知道你一直都在面对这样的问题。即使在谷歌搜索了很多次之后,我也找不到答案。好吧,让我们来谈谈这个问题 要求:使用jQueryAjax请求调用WCF服务GETAPI并启用基本身份验证 客户端代码: <script src="Scripts/jquery-1.9.1.min.js" type="text/javascript"></script> <script src="Scripts/Base64.js" type="text/javascript"&g

朋友们, 我知道你一直都在面对这样的问题。即使在谷歌搜索了很多次之后,我也找不到答案。好吧,让我们来谈谈这个问题

要求:使用jQueryAjax请求调用WCF服务GETAPI并启用基本身份验证

客户端代码:

<script src="Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="Scripts/Base64.js" type="text/javascript"></script>
<%--<script src="Scripts/jquery.base64.js" type="text/javascript"></script>--%>
<script type="text/javascript">
    function make_base_auth(user, pass) {
        var tok = user + ':' + pass;
        var hash = Base64.encode(tok);
        return "Basic " + hash;
    }


    $(document).ready(function () {
        var username = 'user';
         var password = 'ppp';

        var auth = make_base_auth(username, password);
        $.ajax({
            type: "GET",
            dataType: "jsonp",
            contentType: "application/javascript",
            xhrFields: {
                withCredentials: true
            },
            cache: false,
            crossDomain: true,
            beforeSend: function (xhr) {                   
                xhr.setRequestHeader("Authentication", auth)
            },                
            data: { 'inputData': "{PatientID:'12',FromDateTime:'05/21/2013 1:28:15 PM',ToDateTime:'05/21/2013 1:28:15 PM',ResponseType:'json',CompressResponse:'false'}" },


url:"http://192.168.15.160/RestAPI/Service.svc/GetMedicationValues",             


            success: function (jsonData) {
                console.log(jsonData);
            },
            error: function (request, textStatus, errorThrown) {
                console.log(request.responseText);
                console.log(textStatus);
                console.log(errorThrown);
            }
        });
    });
</script>

函数make_base_auth(用户,通过){
var-tok=用户+':'+通过;
var hash=Base64.encode(tok);
返回“基本”+散列;
}
$(文档).ready(函数(){
var username='user';
var密码='ppp';
var auth=make_base_auth(用户名、密码);
$.ajax({
键入:“获取”,
数据类型:“jsonp”,
contentType:“应用程序/javascript”,
xhrFields:{
证书:正确
},
cache:false,
跨域:是的,
beforeSend:function(xhr){
setRequestHeader(“身份验证”,auth)
},                
数据:{'inputData':“{PatientID:'12',FromDateTime:'05/21/2013 1:28:15 PM',ToDateTime:'05/21/2013 1:28:15 PM',ResponseType:'json',CompressResponse:'false'}”,
url:“http://192.168.15.160/RestAPI/Service.svc/GetMedicationValues",             
成功:函数(jsonData){
console.log(jsonData);
},
错误:函数(请求、文本状态、错误抛出){
console.log(request.responseText);
console.log(textStatus);
console.log(错误抛出);
}
});
});
问题:在运行客户端应用程序时,我会出现登录弹出窗口。只有当我在弹出窗口上提供正确的凭据时,我才会得到输出,而不管我在请求头中传递了什么凭据。我遇到过很多人问这个问题。有人能够解决这个问题吗?谢谢。

JSONP和基本身份验证。 如果不需要跨域请求,请使用json作为数据类型

Alos注意到,自JQuery 1.7以来,现在有两种身份验证选项:

如果服务器在提供 响应时,可通过用户名发送用户名和密码对 和密码选项


在我们的案例中,我们需要跨域调用。我也尝试了用户名-密码选项。但遇到了相同的问题。无论我在ajax请求中指定了什么凭据,浏览器登录弹出窗口总是会赢。因此,没有多少解决方案。。。可能尝试在您的网站中创建一个充当代理的服务。是否有人能够在启用基本身份验证的情况下跨域调用WCF?网络上有这么多提供演练的文章,但似乎没有一篇适合我。