2012-11-25 166 views
3

我的解決方案包含兩個asp.net MVC項目。一個將成爲一個網絡服務,另一個是一個普通的網站,從上述網絡服務獲取數據。從一個asp.net web應用程序發送JSON到另一個

我在我的網絡服務到家控制器下面的方法:

... 
public JSONResult GetTeacher(){ 
    return JSON(new {TeacherName = this.teacher.name }); 
} 

我試圖訪問從其他Web應用這種方法(這將是該網站),利用此$就法:

$.ajax({ 
    type: 'GET', 
    url: 'localhost:11370/Home/GetTeacher', 
    contentType: 'application/json; charset=utf-8', 
    success: function (response) { 
     alert(JSON.stringify(response)); 
     $('#results').html('Welcome, ' + response.Name); 
    }, 
    error: function (error) { 
     alert(JSON.stringify(error)); 
    } 
}); 

當我開始調試我的解決方案它開闢了兩個web開發服務器,同時在不同的端口。其結果是,當$就調用發生了,我得到一個彈出這個信息:

XMLHttpRequest cannot load http://localhost:11370/Home/GetTeacher. 
Origin http://localhost:11510 is not allowed by Access-Control-Allow-Origin. 

the page at localhost:11510 says: 
"readystate":0, "responsetext": "" , "status":0, "statustext":"error" 

當我嘗試在谷歌瀏覽器的控制檯,我得到了以下信息直接運行腳本

任何有關如何實際使用$ .ajax訪問方法的幫助將不勝感激。

編輯:我也試着製作一個簡單的html文件,看看如果我打電話給web服務會發生什麼。同樣的結果。另外,當我只輸入方法的url時,它可以正常工作並顯示教師的姓名。

回答

3

由於內置在瀏覽器中的same origin policy restriction,您無法發送跨域AJAX請求。一種可能的解決方法是使用CORS,但由於並非所有瀏覽器都支持,所以如果您需要跨瀏覽器解決方案,則可以考慮使用JSONP

您可以看看我寫的this custom JsonpResult,以說明如何從不同的域中使用控制器操作。值得注意的是,jQuery的JSONP實現僅適用於GET請求。您無法將控制器操作發佈到跨域。如果您需要這樣做,唯一可靠的方法就是在主域上編寫一個服務器端腳本,作爲這兩個域之間的橋樑。然後,您將發送AJAX請求到這個新腳本,該腳本會將請求委託給遠程域並返回結果。

+1

感謝您的支持。我並不十分關心跨瀏覽器兼容性,因爲結果將用於iOS應用程序。 – user1851327

+0

太棒了,那麼你可以使用['CORS'](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing)。只需在'GetTeacher'控制器操作中設置'Access-Control-Allow-Origin'響應頭。 –

相關問題