2013-06-25 102 views
0

我的問題似乎有非常簡單的解決方案,搜索後搜索和谷歌搜索我無法找到它。jQuery ajax無法調用WebMethod

我有一個位於UrlUpdatePage.aspx中的客戶端腳本。它定期打電話從aspx獲取json以獲取操作的當前狀態並向用戶顯示消息。下面是Ajax調用:

var listenForStatusChanges = function() { 
     $.ajax({ 
     type: 'GET', 
     url: "/UrlUpdatePage.aspx/GetRunningState", 
     data: "{}", 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 

     success: function (data) { 
      alert(data.IsRunning); 
     } 
     }); 
    }; 

在代碼隱藏文件UrlUpdatePage.cs我有這樣一個方法

[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public static string GetRunningState() 
{ 
    ... 
    return jsonObj; 
} 

問題是當AJAX調用時,該GetRunningState方法不在調試模式下觸發並且success回調不太好。此外,當我在Firebug中查看請求的詳細信息時,會發出請求,但是從響應選項卡我可以看到該調用返回html標記,而不是json數據。

應該怎麼做才能將GetRunningState方法暴露給客戶端並從服務器獲取json?我使用.NET 4

+0

把你的html作爲回覆複製到記事本中,保存爲html文件並打開。瞧!有你的錯誤。下一篇文章截圖在這裏。 – krishgopinath

+0

@passionateCoder我無法上傳屏幕截圖,但沒有意義:響應只顯示此頁面的標記。 – myroman

回答

1

我想通了,爲什麼我得到的HTML標記,而不是JSON的:due to security reasonsUrlUpdatePage.aspx/GetRunningState只能通過HTTP POST請求調用。 所以,我需要在兩個地方使用POST動詞:type: 'POST'UseHttpGet = false

謝謝大家的幫助!

+0

nope,我已經使用http GET'調用web方法也 –

+0

我承認它可以在測試項目中使用GET,但不能在一個我提到:(所以解決方案可能放在Web.config中,但我不知道在哪裏 – myroman

0

嘗試從URL中刪除第一個斜槓。這樣的:

url: "UrlUpdatePage.aspx/GetRunningState", 
+0

我得到404錯誤,不幸的是這個問題不在這裏。 – myroman

+0

嘗試刪除'scripmethod'註釋。我做了很多次,開箱即用,只是設置了「webmethod」插入。不要忘了編譯服務器端代碼;) – anmarti

+0

它也不工作 – myroman