2013-03-02 27 views
0

我想在使用jQuery的asp.net項目中使用wcf rest api。爲此我做了:使用jquery在ASP.net中使用WCF Rest服務

  1. 創建一個WCF Rest服務源代碼可以從here下載。
  2. 創建一個ASP.Net項目,使用jQuery來使用restAPI。源代碼here

在ASP .Net項目上點擊按鈕我試圖調用一個REST服務。但每次我得到兩個問題:

  1. 調用var jsondata = JSON.stringify(request);在TestHTML5.js拋出一個錯誤說「微軟JScript運行時錯誤:‘JSON’未定義

  2. 當我按下忽略它繼續朝向WCF Rest API調用,但它總是返回錯誤(Not Found)函數。 Rest API永遠不會被調用。

感謝各位的幫助提前。


答: 解決方案和源鏈接可以在這個link找到。

+0

您正在測試什麼瀏覽器和瀏覽器版本? JSON對象在IE7中不可用 – Tung

+0

我正在使用IE9。在Windows 8中IE10不會發生同樣的問題。它的工作原理(沒有Json錯誤)非常好。 – nishantcop

+0

確保您的頁面不是以怪癖模式呈現,也不是以[可壓縮模式]呈現(http://www.sevenforums.com/tutorials/1196-internet-explorer-compatibility-view-turn-off.html)。如果你想支持這些操作模式,那麼Sharrooz的建議應該起作用。看到答案[這裏](http://stackoverflow.com/questions/5339232/json-is-undefined-error-in-javascript-in-internet-explorer) – Tung

回答

1

我看過您提供的樣本代碼和問題是,你違反了same origin policy restriction。您無法執行跨域AJAX調用。在您的示例中,服務託管在http://localhost:35798上,並且網絡應用程序調用http://localhost:23590,這是不可能的。您將不得不在同一個ASP.NET項目中同時託管服務和調用應用程序。您好像試圖在客戶端使用($.support.cors = true;)啓用CORS,但您的服務不支持CORS。

您的調用頁面(TestHTML5.htm)出現的另一個問題是,您已經包含jquery兩次(一次縮小和一次標準版本),並且在jquery後包含腳本(TestHTML5.js)。你應該修復你的腳本引用。還有一個問題是以下行<script type="text/javascript"/>,這是無效的。

<!DOCTYPE html> 
<html dir="ltr" lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="utf-8" /> 
    <title>SignUp Form</title> 
    <script type="text/javascript" src="../Scripts/jquery-1.7.2.min.js"></script> 
    <script type="text/javascript" src="../Scripts/TestHTML5.js"></script> 
</head> 
<body> 
    <button id="Send" onclick="testHTML5OnClick();"> 
     Send Me ID! 
    </button> 
</body> 
</html> 

,然後在TestHTML5.js你也可以清潔:

所以,通過固定的標記(我爲了專注於重要部分已刪除所有你在標記有CSS噪聲)啓動一點點。例如,您的服務正在偵聽以下url模式json/{id}並且只接受GET動詞,並且您嘗試使用不可能的POST。除此之外,您正嘗試使用對GET動詞沒有任何意義的JSON.stringify方法。您應該簡單地將id作爲您在服務中定義的url部分的一部分發送。

function testHTML5OnClick() { 
    var id = 5; 
    var url = "../RestServiceImpl.svc/json/" + id; 
    var type = 'GET'; 
    callLoginService(url); 
} 

function callLoginService(url, type) { 
    $.ajax({ 
     type: type, 
     url: url, 
     success: serviceSucceeded, 
     error: serviceFailed 
    }); 
} 

function serviceSucceeded(result) { 
    alert(JSON.stringify(result)); 
} 

function serviceFailed(result) { 
    alert('Service call failed: ' + result.status + '' + result.statusText); 
} 
+0

完美的解釋達林。它具有魔力:-)非常好的點對點解釋。我對這一切都很陌生,因此產生了所有這些故障。稍後當我完成我的實驗時,我可能會再回來檢查幾件事情。現在感謝您爲我正在尋找的確切的東西。 – nishantcop

+0

嗨Darin,一個簡單的問題是,如果我們託管一個基於WCF的REST API,並且有另一個應用程序(可能在java或任何其他平臺上)使用簡單的HTML5和jQuery,他們不能利用這個WCF RIA? – nishantcop

+0

由於您的WCF REST服務正在處理XML和JSON等互操作格式,因此從其他平臺上使用它絕對沒有問題。 –

1

您是否添加此參考?

script type="text/javascript" src="../../json.js"></script> 

我有同樣的問題,搜索我得到thisresult

+0

感謝它似乎與IE10(Windows 8)的問題,我在Win7中與IE9有問題。然而,你有沒有關於第二個問題的想法,似乎更麻煩。感謝大家提前幫助 – nishantcop