2013-06-25 101 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