2013-08-04 45 views
1

我打電話我的網頁的方法失敗:

var dfd = $.Deferred(
    $.getJSON(serviceAddress) 
     .done(function (result, status) { 
      bo.BusinessObject.DtosToaKoArray(result, resultList); 
      dfd.resolve(resultList); 
     }) 
     .fail(function (result, status) { 
      logger.logError(result); 
      dfd.reject(result); 
     })); 

return dfd; 

調用JSON後,螢火顯示的HttpRequest是全成和響應頭是這樣的:

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?RDpcV29ya3NwYWNlc1xNZWhyYW5cSW5mcmFzdHJ1Y3R1cmVcTWFpblxTb3VyY2VcSW5mcmFzdHJ1Y3R1cmVcU291cmNlXENhcmFuZS5HYWxheHkuV2ViQXBpXGFwaVxEYXRhUHJvdmlkZXJcTGlzdFNlcnZpY2Vc?= 
X-Powered-By: ASP.NET 
Date: Sun, 04 Aug 2013 05:57:39 GMT 
Content-Length: 6684 

但問題在於不是done回調,該回調fail被稱爲這個結果:

Object { readyState=4, status=404, statusText="error"} 

我的電話沒有成功的http請求失敗,這是怎麼回事?

Edit1。

我的網站(MyApp.Web)是在localhost:2771和呼叫服務是在本地主機上另一個項目(MyApp.WebApi):4143

+0

你的預期響應是什麼,請問一些服務器代碼? –

+0

@JonathanLonowski我已經完全刪除了延遲部分,只是稱爲'getJSON'部分。但問題仍然存在。 – mehrandvd

+0

@Hemant_Negi我希望調用'done'函數(因爲它是一個成功的響應),結果將是返回的json。 – mehrandvd

回答

1

你肯定會遇到一些障礙,試圖做出跨越請求。 That includes port-to-port

解決方案還取決於服務和它支持的功能。

  • JSONP(或,JSON與填充)

    的服務需要接受callback並輸出JSON包裹在一個函數調用:

    // http://...?callback=completeRequest 
    completeRequest(["json", "data"]); 
    

    該參數可以是不同的名稱比callback。但是,您可以指示jQuery的通過包含一個佔位符參數(...=?)使用它:

    $.getJSON(serviceAddress + "?callback=?") 
    

    這也可以在任何瀏覽器,因爲它是要求作爲<script src>和JSON會被解析爲JavaScript literals使用。

  • CORS

    該服務將需要支持preflight, OPTIONS requestsAccess-Control-Allow-* headers迴應。

    此外,雖然most current browsers support CORS,這可以,如果你需要支持舊版本的限制。

否則,你需要創建你的應用程序(localhost:2771)代理目的地,使跨域請求服務器端的服務(localhost:4143)。

+0

謝謝,它確實有幫助。我剛剛使用了http://www.symbolsource.org/Public/Metadata/NuGet/Project/Microsoft.AspNet.WebApi.Cors中的「Microsoft.AspNet.WebApi.Cors」 – mehrandvd

0

它可能無法找到目標網頁,這就是爲什麼你可能會在你的結果對象中得到一個404。確保你的服務地址是正確的。

除此之外當您指定:dataType: 'json'如果響應不能被解析爲JSON(儘管200答覆),jQuery將觸發錯誤事件。確保從服務器返回的數據是有效的JSON,您可能需要通過JSONLint手動驗證結構。

它可能是這兩個問題中的任何一個。

+0

正如我所說螢火蟲顯示該調用成功,所以'serviceAddress'沒有任何錯誤。 – mehrandvd

+0

json格式沒問題。但有一點可能涉及。我的網站在'localhost:2771'上,並且調用的服務在'localhost:4143'的另一個項目中。 – mehrandvd