为什么调用我的ASP.NET WebMethod调用我的错误处理程序?

时间:2011-11-16 19:48:17

标签: jquery asp.net ajax web-services webmethod

我正在尝试使用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”有关,但我只是不确定。

3 个答案:

答案 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()行。

由于我仍然不完全理解的原因,删除此行导致代码按预期开始工作。

感谢所有评论。猜猜用我提供的信息很难解决这个问题。