我正在尝试使用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 }
这就是webservice返回的内容:
{"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”有关,但我只是不确定。
答案 0 :(得分:2)
尝试添加:
contentType: "application/json; charset=utf-8" ,
dataType: "json",
type: "POST",
给你的ajax请求
在您的成功处理程序上,请致电:
alert('Success: ' + results.d.length);
它应该提醒5
另外,我之前没见过“失败”处理程序。我现在将它评论为以防万一...... 我认为“错误”处理程序应该足够了。
答案 1 :(得分:1)
以下是我用来调用我的asmx服务的内容。你的其他代码看起来不错。
<script type="text/javascript">
function testAsmx() {
$.ajax({
type: "POST",
url: "http://localhost/ASMXtoWCF/test.asmx/HelloWorld",
dataType: "json",
data: '{"variable":"testme"}',
contentType: "application/json; charset=utf-8",
success: function (msg) {
alert(msg.d);
},
error: function (msg) {
alert("I am a failure");
}
});
}
</script>
答案 2 :(得分:1)
<强>分辨强>
我终于能够纠正这个问题了。它似乎是我们使用旧版本的jQuery(1.2.6)以及我们配置它的方式的组合。具体来说,我们在dataType: "json"
中有$.ajaxSetup()
行。
由于我仍然不完全理解的原因,删除此行导致代码按预期开始工作。
感谢所有评论。猜猜用我提供的信息很难解决这个问题。