2012-01-13 16 views
6

Sto tentando di accedere a webservice in un altro dominio e non restituisce nulla. più tardi ho capito che si trattava di un problema per l'accesso interdominio.problema di dominio incrociato con Jquery

Ho cercato online e ci sono tanti articoli ma nessuno è leggibile da principianti come me. :(

Qualcuno può darmi una mano come accedere al webservice ??

segue è il mio codice.

//variables for Add Contacts 
var addAccountServiceUrl = 'http://crm.eyepax.net/organization.asmx?op=WriteOrg'; // Preferably write this out from server side 
var OrganizationID=123; 
var ParentID=123 ; 
var AccountManagerID="123"; 
var OrganizationName="Testapple"; 
var IncorporationNo="23"; 
var PostAddress="asdfklj asldfj"; 
var CountryID="LK"; 
var VisitAddress="asldkf asldkf asldfas dfasdf"; 
var VisitCountryID="LK"; 
var VisitSwithboard="242344"; 
var VisitFax="234234"; 
var Www="http://www.eyepax.com"; 
var Active=true; 
var RegBy=345345345345; 
var ConfigurationCode="[email protected]"; 
var Flag=1; 
var LicenceOrganazationID=1; 
var sErr; 

function addContact() 
{ 
//this is to be commented soon! 
alert("function called"); 
//update the webservice soapmesg 

var soapMessage = 
'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> \ 
<soap:Body> \ 
    <WriteOrg xmlns="http://eyepax.crm.com/Organization"> \ 
     <OrganizationID>'+OrganizationID+'</OrganizationID> \ 
     <ParentID>'+ParentID+'</ParentID> \ 
     <AccountManagerID>'+AccountManagerID+'</AccountManagerID> \ 
     <OrganizationName>'+OrganizationName+'</OrganizationName> \ 
     <IncorporationNo>'+IncorporationNo+'</IncorporationNo> \ 
     <PostAddress>'+PostAddress+'</PostAddress> \ 
     <CountryID>'+CountryID+'</CountryID> \ 
     <VisitAddress>'+VisitAddress+'</VisitAddress> \ 
     <VisitCountryID>'+VisitCountryID+'</VisitCountryID> \ 
     <VisitSwithboard>'+VisitSwithboard+'</VisitSwithboard> \ 
     <VisitFax>'+VisitFax+'</VisitFax> \ 
     <Www>'+Www+'</Www> \ 
     <Active>'+Active+'</Active> \ 
     <RegBy>'+RegBy+'</RegBy> \ 
     <ConfigurationCode>'+ConfigurationCode+'</ConfigurationCode> \ 
     <Flag>'+Flag+'</Flag> \ 
     <LicenceOrganazationID>'+LicenceOrganazationID+'</LicenceOrganazationID> \ 
    </WriteOrg> \ 
    </soap:Body> \ 
</soap:Envelope>'; 

$.ajax({ 
url: addAccountServiceUrl, 
type: "POST", 
dataType: "xml", 
data: soapMessage, 
success: endAddContact, 
error: function(jqXHR, textStatus, errorThrown) {alert("failure"); console.log(textStatus);console.log(errorThrown);}, 
contentType: "text/xml; charset=\"utf-8\"" 
}); 

return false; 
} 

function endAddContact(xmlHttpRequest, status) 
{ 
    console.log(xmlHttpRequest); 
    console.log(status); 
    alert("webservice called!"); 
$(xmlHttpRequest.responseXML) 
    .find('WriteOrgResponse') 
    .each(function() 
{ 
    var orgres = $(this).find('WriteOrgResult').text(); 
    var error = $(this).find('vstrError').text(); 

    alert(orgres +' -'+ error); 
}); 

var a = $(xmlHttpRequest.responseXML).find('WriteOrgResult'); 
var b = $(xmlHttpRequest.responseXML).find('vstrError'); 
console.log("a"+a.text()); 
console.log("b"+b.text()); 
} 
+0

sei in grado di fare questo? –

risposta

5

browser non consentono cross-domain chiamate AJAX. Solo tra domini JSONP richieste sono ammessi.

per utilizzare richieste JSONP, è necessario modificare la proprietà dataType a jsonp. Ciò significa che, tuttavia, non è possibile richiedere XML, ma solo JSONP.


Un po 'di JSONP:

Il <script> tag bypassa i limiti tra domini. Il che significa che puoi usare quel tag per ottenere dati da altri server. Quel tag non supporta tutti i tipi di linguaggi, quindi XML non è supportato.

JSONP è fondamentalmente JSON, ma con una chiamata di funzione in giro in questo modo:

functionname({"property":"value"})

Vedo che chiedersi: "Che cosa è che functionname facendo lì"

Questo è ESATTAMENTE la differenza con JSON. Poiché la funzione è avvolta attorno ad essa, puoi usare i dati reali!

<script type="text/javascript"> 
var functionname = function(json) { 
    alert(json.property); 
} 
</script> 
<script type="text/javascript" src="http://www.domain.com/jsonp"></script> 

Se si sostituisce il secondo tag script con il contenuto della risposta, sarà tutto un senso:

<script type="text/javascript"> 
var functionname = function(json) { 
    alert(json.property); 
} 

functionname({"property":"value"}); 
</script> 

ci crediate o no, ma questa differenza minore in realtà ci permette di fare cross-domain richieste molto più sicure.

Another thread about JSONP

3

Per la comunicazione tra domini utilizzando Javascript è necessario usare sia per un proxy locale per passare le richieste di domini esterni o utilizzare JSON con imbottitura aka JSONP.

Se il sito esterno offre la possibilità di utilizzare JSONP, procedere con quello. In caso contrario, esaminare creating a proxy tra l'app Web e il server remoto.

Problemi correlati