【发布时间】:2011-11-16 19:48:17
【问题描述】:
我正在尝试使用 AJAX 从 ASP.NET 网页调用 Web 服务。但它总是调用我的错误处理程序而不是我的成功处理程序。
这是我的 javascript:
function DeleteCurrency(currenciesId) {
$.ajax({
url: "Ajax/Currencies.asmx/GetCurrencyUsage",
data: "{ 'currencyId' : '" + currenciesId + "' }",
failure: function (msg) {
alert('Failure: ' + msg);
},
error: function (result, thrownError) {
alert('Error:');
},
success: function (results) {
alert('Success: ' + results);
}
});
}
这是我的 asmx 文件中的代码:
/// <summary>
/// Summary description for Currencies
/// </summary>
[WebService(Namespace = "http://xxx.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
[System.ComponentModel.ToolboxItem(false)]
public class Currencies : System.Web.Services.WebService
{
[WebMethod]
public string[] GetCurrencyUsage(int currencyId) {
List<string> list = new List<string>();
list.Add(currencyId.ToString());
list.Add("This is item 1");
list.Add("This is item 2");
list.Add("This is item 3");
list.Add("This is item 4");
list.Add("This is item 5");
return list.ToArray();
}
}
根据 Fiddler 的说法,这是我要发送的内容:
{ 'currencyId' : 3 }
这是 web 服务返回的内容:
{"d":["3","This is item 1","This is item 2","This is item 3","This is item 4","This is item 5"]}
如前所述,我的错误处理程序被调用。但是结果参数的状态显示“OK”和200。第二个参数的类型是parsererror。
所有数据似乎都在那里,那么错误在哪里。它与结果中的“d”有关吗?我不知道下一步该去哪里。
编辑:
进一步的测试表明,如果我将 Web 服务更改为返回单个字符串(而不是数组),一切都会按预期工作。
显然,我的 Web 服务被正确调用,它返回的状态为 200(OK),并且它也返回了预期的数据。但是当有多个值时,解析结果会出现某种错误。我仍然想知道它是否与“D”有关,但我不确定。
【问题讨论】:
-
调用是否真的返回数据?您可能会指定
contentType: "application/json; charset=utf-8"和dataType: "json"选项。 (source) -
是的,正如我所提到的,所有数据似乎都在那里(使用调试器查看)并且 Fiddler 显示它正在返回。我已经尝试过这两种设置(以及许多其他设置),但都没有帮助。
-
答案中的 D 是正常的。这是 Microsoft 添加到 Json 的一种安全措施。
-
@Daok:我知道“D”是 MS 的一项安全措施。但似乎请求工作正常,但我在某处返回的数据出现解析错误。所以很自然地想知道解析“D”是否有问题。
标签: jquery asp.net ajax web-services webmethod