2013-12-16 118 views
0

我有一臺運行服務的服務器,我想以某個時間間隔向服務運行ping請求,以便我可以知道它何時準備就緒。通過jQuery的SOAP請求AJAX

得到以下ping.dat文件:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:dvt="[private]"> 
    <soapenv:Header /> 
    <soapenv:Body> 
     <dvt:Ping/> 
    </soapenv:Body> 
</soapenv:Envelope> 

而且下面的JavaScript功能(將被納入setInterval()功能):

function doAjax() {  
    //load request document 
    $.ajax({ 
     cache: false, 
     crossDomain: true, 
     async: true,     
     dataType: 'xml', 
     type: 'POST', 
     data: null, 
     url: "./ping.dat", 
     error: function(xhr, sta, err){ alert(err); }, 
     success: function(ret, sta, xhr){ 
      //ping service 
      $.ajax({ 
       cache: false, 
       crossDomain: true, 
       async: false, 
       processData: false, 
       contentType: "text/xml; charset=\"UTF-8\"", 
       dataType: 'xml', 
       data: processXML(xhr.responseText), 
       type: 'POST', 
       url: "[private]", 
       error: function(xhr, sta, err){ 
        alert(err); 
       }, 
       success: function(ret, sta, xhr){ 
        $('#response').text($.trim(ret)); 
       }, 
       complete: function(xhr, sta){ 
        alert('complete'); 
       }, 
      }); 
     } 
    }); 
} 

function processXML(text){ 
    var ret = null; 
    if ((typeof(ret) !== 'undefined')&&(text !== null)&&(text.length !== 0)) 
     ret = $.trim(text.replace(/[\n\t]+/g, '')); 

    return ret; 
} 

當我使用了SoapUI調用服務和負載ping請求,它的工作原理。

當我使用JS的功能,瀏覽器報告:

OPTIONS [私人] 200(OK)的jquery-1.10.2.js:8706

的XMLHttpRequest不能加載[私人]。請求的資源上沒有「Access-Control-Allow-Origin」標題。 Origin'http:/ / localhost:8080'因此不被允許訪問。

這是什麼原因造成的?

回答

1

該消息是明確的:否請求的資源上存在'Access-Control-Allow-Origin'標頭。

如果您確實正在執行跨域Ajax請求,則服務器必須使用適當的HTTP標頭進行響應。瀏覽器發出OPTIONS HTTP請求,並通過查看收到的標題來檢查服務器是否「批准」訪問。如果標題丟失,那麼瀏覽器有義務返回錯誤並禁止對資源的請求。

看到這裏的細節:HTTP access control (CORS)

了SoapUI不受the same origin security policy就像一個瀏覽器,所以這就是爲什麼查驗Web服務從工作了SoapUI。