2012-02-14 66 views
0

我有一個WCF服務,它返回一個字符串。我正在嘗試使用跨域JsonP請求來調用它。這是在IE中工作,但沒有其他瀏覽器。我在Firefox和Chrome中收到解析器錯誤。通過跨域JSONP AJAX呼叫通過WCF服務檢索HTML字符串

從閱讀各篇文章我似乎認爲,可能服務需要返回結果作爲一種不同的格式。任何想法都會有所幫助,這裏是我的代碼。

WCF服務代碼

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] 
public string SponsorLayout2(string projectScope, int projectYear, int imageHeight) 
{ 
    // Mock data 
    projectScope = "uk"; 
    projectYear = 2012; 
    imageHeight = 42; 

    // Get projectId 
    var project = Projects.GetProjectByProjectScopeAndYear(projectScope, projectYear); 

    // Get project sponsor layouts 
    var projectSponsorLayout = ProjectSponsorLayouts.GetProjectSponsorLayout(project.Id, imageHeight); 

    // Return the sponsors 
    if (projectSponsorLayout != null) 
     return projectSponsorLayout.Body; 

     return null; 

} 

jQuery的AJAX調用

$.ajax({ 
cache: false, 
type: "GET", 
async: false, 
data: {}, 
url: "http://127.0.0.1:8082/HtmlService.svc/SponsorLayout2", 
contentType: "application/json; charset=utf-8", 
dataType: "jsonp", 
crossDomain: true,   
success: function (data) { 
    alert("success");  
}, 
error: function (xhr) { 
      alert("error"); 
    alert(xhr.statusText); 
}, 
complete: function(jqXHR, textStatus) {  
      alert(textStatus); 
     } 
}); 

回答

1

我發現爲什麼我得到上述問題的陳述,我想我會與大家分享。 出於某種原因,有此屬性

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

它坐在我的課

public class MyClass 

的頂部,這條規則在我的web.config文件之間的衝突,

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true" /> 

我有最終在我的web.config中排除了這個規則,並且所有的東西都變成了現實。因爲我的服務是一個AJAX就緒服務,所以該屬性被添加到開箱即用的類之上。無論如何,這爲我工作,並希望它可以幫助其他人在相同的情況。