我想在我的上执行一个简单的$.ajax POST,返回asp.net。我已经尝试了所有可能的解决方案,但没有任何运气。我是不是遗漏了什么?
我的jQuery代码:
$.ajax({
type: "POST",
url: "/Services/ConfiguratorService.asmx/GetInitialJson",
contentType: "application/json; charset=utf-8",
data: "{}",
dataType: "json",
success: function (data, textStatus, jqXhr) {
if (data != null) {
alert(data.d);
} else {
alert("data undefined: | " + jqXhr + " | " + textStatus);
}
},
error: function (jqXhr, textStatus, errorThrown) {
alert(jqXhr + " | " + textStatus + " | " + errorThrown);
}
});我的asmx.cs代码:
[WebMethod(Description = "Gets initial configuration values for Configurator")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
public ConfiguratorModel GetInitialModel()
{
return new Item { Title: "10 units", Text: "Item text..." };
}
public class Item { public string Title {get; set;} public string Text {get; set;} }更新1:在我的解决方案中,我得到了一个响应,但仅以XML形式返回。我试图在一个新的解决方案中重现这个错误,但没有成功。一切都运行得很好。新旧解决方案中的.asmx服务实际上都返回相同的响应。唯一的区别是其中之一的jquery失败,错误为: parsererror,意外的token <
更新2:我的旧解决方案中的响应头总是"text/xml;charset=utf-8“。
更新3:我的web.config包含了所需的所有条目。响应仍然是"text/xml;charset=utf-8“。为什么?
发布于 2013-06-25 20:26:49
我的一位同事帮我指了指方向。我发现处理程序是asp.net 2.0。今年早些时候,该解决方案从2.0升级到4.0。我所要做的就是替换:
<add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHadlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode" responseBufferLimit="4194304" />通过以下方式:
<add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />一个好主意是尝试临时删除所有处理程序,只添加:
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>发布于 2013-06-21 21:06:06
使用static关键字调用方法,就像定义静态方法一样
public static ConfiguratorModel GetInitialModel()
{
return new Item { Title: "10 units", Text: "Item text..." };
}发布于 2013-06-21 21:06:25
我有这样的web服务:
[WebService(Namespace = "http://example.com/")]
[System.Web.Script.Services.ScriptService]
public class api : System.Web.Services.WebService {
[WebMethod(EnableSession = true)]
public ServiceResponse<string> SignIn(string _email, string _password) {...}
}还有像你这样的$.ajax电话。对我来说一切都很好。您可能需要将[System.Web.Script.Services.ScriptService]添加到服务类中。据我所知,这是JSON响应的关键。jQuery调用如下所示:
$.ajax({
type: "POST",
url: "/api.asmx/SignIn",
dataType: "json",
data: JSON.stringify({"_password": pwd,
"_email": email
}),
contentType: 'application/json; charset=utf-8',
success: function (res) { }
});编辑:
public ConfiguratorModel GetInitialModel()
{
return new Item { Title: "10 units", Text: "Item text..." };
}此方法定义看起来是错误的。当返回类型为ConfiguratorModel时,我不明白如何返回Item。这在编译时肯定会失败。
https://stackoverflow.com/questions/17235928
复制相似问题