2013-05-22 2 views
10

Robię zapytanie o domenę w różnych domenach, aby uzyskać pewne dane. Usługa REST ma Basic authentication (ustawiona przez IIS).Podstawowe żądanie uwierzytelnienia w domenie ajaxowej domeny

$.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); 
      } 
     }); 

Kiedy robię ten wniosek, to skłania mnie do wprowadzenia poświadczenia & muszę ręcznie wprowadzić dane uwierzytelniające, aby uzyskać odpowiedź. Czy możemy przesłać te referencje za pośrednictwem samego żądania?

Odpowiedz

5

Przełęcz nazwę użytkownika i hasło jak poniższy kod,

$.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

nie jestem podekscytowany tym odpowiedź, a oto dlaczego: to zbędny (pytanie odpowiedział około pół roku wcześniej) i jest zbędny (jQuery obsługuje twoje dokumenty, AFAICT). Jeśli się mylę co do tego drugiego, edytuj odpowiedź, a ja usunę ten komentarz. –

+0

Użycie właściwości beforeSend sprawdziło się, ponieważ nazwa użytkownika i hasło z jakiegoś powodu nie dodawały nagłówka Authorization. Na wszelki wypadek, że pomaga każdemu. – rodrigobartels