2012-01-17 76 views
1

我正在通過jQuery訪問XML(.net)webservice,並且由於跨域訪問限制,我受到了限制。我使用簡單的PHP代理並調用web服務。作爲一個新手webdev真的很頭疼。使用PHP代理跨域訪問

我正在做一個有趣的迴應如下。

{"status":{"http_code":500},"contents":"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http:\/\/www.w3.org\/2003\/05\/soap-envelope\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver<\/soap:Value><\/soap:Code><soap:Reason><soap:Text xml:lang=\"en\">Server was unable to process request. ---&gt; Root element is missing.<\/soap:Text><\/soap:Reason><soap:Detail \/><\/soap:Fault><\/soap:Body><\/soap:Envelope>"} 

這是我的JavaScript

var proxy = 'proxy.php'; 
//http://crm.eyepax.net/contact.asmx?op=LogIn 
//variables for Add Contacts 
var addAccountServiceUrl = proxy+'?url='+serviceURL'; // 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; 

var userName="test123"; 
var password="Eyepax321"; 

var flag="2"; 

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> \ 
    <LogIn xmlns="http://eyepax.crm.com/contact"> \ 
     <UserName>'+userName+'</UserName> \ 
     <Password>'+password+'</Password> \ 
     <ConfigurationCode>'+ConfigurationCode+'</ConfigurationCode> \ 
     <Flag>'+flag+'</Flag> \ 
    </LogIn> \ 
    </soap:Body> \ 
</soap:Envelope>'; 

$.ajax({ 
beforeSend: function(jqXHR, settings) { 
     //var xhr = new CrossXHR(); 
     //jqXHR = xhr; 
    }, 
url: addAccountServiceUrl, 
type: "POST", 
dataType: "xml", 
data: soapMessage, 
crossDomain: true, 
success: endAddAccount, 
error: function(jqXHR, textStatus, errorThrown) { 
    alert("failure"); 
    console.log(textStatus); 
    console.log(errorThrown);}, 
contentType: "text/xml; charset=\"utf-8\"" 
}); 

return false; 
} 

function endAddAccount(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()); 
} 


//function for field validation 
$("#add_account_page").live('pageinit', function(event) { 
//alert("Add Test");  
var account_name_val; 
$("#submit").click(function(){ 
    account_name_val = $("#account_name").val(); 
    // this function is used to see whether mandatory field Account Name is available 
    if(account_name_val==""){ 
     alert("Please fill Account Name"); 
     $("#account_name").focus(); 
    } 
    else{ 
     //calling webservice 
      addContact(); 
      } 
     }); 
    }); 

PHP proxy source

回答

1

我能夠通過PHP proxy reqeust發送和獲取結果。