服务器响应状态为405(方法不允许)

时间:2012-12-27 08:10:15

标签: jquery asp.net web-services

我是网络服务的新用户,当我尝试在Chrome控制台中运行我的网页(本地)时出现以下错误

错误

  

无法加载资源:服务器响应状态为405(方法不允许)http://localhost:12015/myWebService.asmx?op=GetCategories


以下是相关代码:

的jQuery

 $.ajax({
     url: "http://localhost:12015/myWebService.asmx?op=GetCategories",
     type: "POST",
     ------------
     ------------
    success: function (data) {                    
         var categories = data.d;
         $.each(categories, function (index, category) {
             category.CategoryId).text(category.CategoryName);
         });
    },
    error: function (e) {  //always executing 'error' only
         alert("hello");
    }

网络服务网址

  

http://localhost:12015/myWebService.asmx


 [WebMethod]
 [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
 public List<Categories>  GetCategories()
 {
      //code
 }

网页网址

  

http://localhost:11761/Default.aspx

编辑:当我刚刚包含dataType: 'jsonp'时错误消失但现在又出现了另一个错误。

  

未捕获的SyntaxError:意外的令牌&lt;
  :12015/myWebService.asmx?op=GetCategories&callback=jQuery183010907560377381742_1356599550427&{}&_=1356599550438:3

当我点击链接(错误中提到的)时,它正在显示页面。那可能是什么问题?我不知道错误意味着什么(以及代码的哪一部分显示)。请帮忙。

相关

Link1(解释)
Link2(已解决)

5 个答案:

答案 0 :(得分:3)

试试这个

 [WebMethod]
 [ScriptMethod(UseHttpPost = true)]
 public List<Categories>  GetCategories()
 {
      //code
 }

或修改web.config

<system.web>
    ...
    <webServices>
        <protocols>
              <add name="HttpSoap"/> 
              <add name="HttpPost"/> --> 
              <add name="HttpGet"/>
              <add name="Documentation"/>
              <add name="HttpPostLocalhost"/>
        </protocols>
    </webServices>
    ...
</system.web>

参考http://codeclimber.net.nz/archive/2006/12/22/How-to-enable-an-ASP.NET-WebService-to-listen-to-HTTP.aspx

答案 1 :(得分:3)

将您的内容类型设为“application / json; charset = utf-8”,如下所示

$(document).ready(function() {
$.ajax({
type: "POST",
url: "RSSReader.asmx/GetRSSReader",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
  // Hide the fake progress indicator graphic.
  $('#RSSContent').removeClass('loading');

  // Insert the returned HTML into the <div>.
  $('#RSSContent').html(msg.d);
 }
});
});

也请参考link

答案 2 :(得分:2)

我在jquery ajax调用

上方的朋友的建议上添加了一个简单的行
 jQuery.support.cors = true;

现在工作正常:)

仅限 IE 浏览器

我很高兴知道它是否可以使用不同的方式解决,因为它不是recommended

无论如何,经过多次努力后我再次提出这个问题,我得到了不同的错误,这篇错误已在本文中解决here

答案 3 :(得分:1)

在我的情况下它失败了因为在servet中没有POST方法,但我有GET方法。

所以我改变了类型:&#34; GET&#34;,所以它现在正在运作。

答案 4 :(得分:0)

添加允许访问服务器端的所有原始源