2012-02-24 77 views
1

我有一個公開的WCF RESTful服務,我嘗試使用客戶端通過使用jQuery ajax調用來調用這些WCF RESTful服務。該代碼似乎在IE 9做工精細,但給錯誤的Safari 5.0.3Safari中的jQuery Ajax調用錯誤

這是下面這段代碼:

<script type="text/javascript"> 
    $(document).ready(function() { 

     $('#butCallAjax').click(function() { 


jQuery.support.cors = true; 


      $.ajax(
       { 

        type: 'POST', 
        url: 'http://<server_name>/Service.svc/login', 
        data: '{"Domain":"mydomain","UserName":"myusername","Password":"mypassword"}', 
        contentType: 'application/json; charset=utf-8', 
        dataType: 'json', 
        success: function (data) { 

         alert('success'); 
         $.each(data, function (i, theItem) { 

          try { 
           //alert('success add combo'); 
           // Other browsers 
          } 
          catch (error) { 
           alert('error found'); 
//        combo.add(option); // really old browser 
          } 

         }); 
        }, 
        error: function (msg, url, line) { 
         alert('error trapped in error: function(msg, url, line)'); 
         alert('msg = ' + msg + ', url = ' + url + ', line = ' + line); 

        } 
       }); 


      //alert('button click'); 

     }); 
    }); 
</script> 

誰能幫助我?謝謝!錯誤功能從Safari中調用,我可以看到兩個警報彈出窗口。

回答

0

好吧,終於得到了解決這一點;經過近一週的大量試驗和錯誤!

在global.asax文件中添加了這個,safari似乎能夠訪問POST方法!

String corsOrigin, corsMethod, corsHeaders; 

corsOrigin = HttpContext.Current.Request.Headers["Origin"]; 
corsMethod = HttpContext.Current.Request.Headers["Access-Control-Request-Method"]; 
corsHeaders = HttpContext.Current.Request.Headers["Access-Control-Request-Headers"]; 

if (corsOrigin == null || corsOrigin == "null") 
{ 
    corsOrigin = "*"; 
} 

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", corsOrigin); 

if (corsMethod != null) 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", corsMethod); 

if (corsHeaders != null) 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", corsHeaders); 

if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
{ 
    return; 
} 
0

如果您的WCF位於遠程服務器上並正在從另一個服務器進行調用,則出於安全考慮,無法在遠程服務器上進行Ajax調用。看看同源策略:

http://en.wikipedia.org/wiki/Same_origin_policy

要通過Jquery.getJSON()函數進行遠程調用使用JSONP。檢查此鏈接瞭解詳細信息:

http://api.jquery.com/jQuery.getJSON/

+0

事實上,當我開發一個小測試應用程序並使用「GET」方法對其進行測試時,它以前工作正常。 WCF服務調用確實做出響應。此外,我有允許 - 訪問 - 允許 - 原產地:*所以,應允許跨域訪問,不是嗎?另外,如果它不可訪問,那麼來自IE的呼叫如何工作? – Anupam 2012-02-24 09:28:58