使用jQuery AJAX调用ASMX服务的ASP.NET 4.0

7
我尝试使用jQuery调用一个asmx示例服务,以下是jQuery代码:
$.ajax({
            type: "POST",
            url: "/Services/Tasks.asmx/HelloWorld",
            data: "{}",
            dataType: "json",
            contentType: "application/xml; charset=utf-8",
            success: function (data) {                   
                alert(data);                    
            }
        });

这没有显示任何信息,代码是在asp.net 4.0中,我有遗漏了什么吗?

编辑 - 我将dataType更改为xml,现在成功函数正在工作并返回以下xml

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>

我使用以下代码解析XML数据,但在警告框中显示为null。
success: function (data) {
    edata = $(data).find("string").html();
    alert(data);
}

尝试添加 complete: function(x,y,z){ } 并查看返回了什么。 - Brian
4个回答

6
我认为原因在于您设置了dataType: "json",因此它期望响应的内容类型相同,但实际返回的是XML。我猜complete事件被触发了,但是success事件没有被触发。

尝试:

$.ajax({
            type: "POST",
            url: "/Services/Tasks.asmx/HelloWorld",
            data: "{}",
            dataType: "json",
            contentType: "application/xml; charset=utf-8",
            success: function (data) {                   
                alert(data);                    
            },
            complete: function (data) {                   
                alert(data);                    
            }
        });

更新

我认为问题出在你使用了.html(),你需要使用.text()。另外,我不知道你是否有意这样做,但是你的警告框中有data,我假设你应该使用edata。以下代码对我有效:

jQuery.ajax({
    type: "POST",
    url: "/yourURL",
    dataType: "xml",
    data: "{}",
    contentType: "application/xml; charset=utf-8",
    success: function(data) {
        edata = $(data).find("string").text();
        alert(edata);
    }
})

你好,以下是翻译的文本:在完整事件中,我正在尝试解析XML,如“edata = $(data).find(”string“)。html();”,但它返回null。 - Sharique
我将数据类型设置为XML,现在成功了,但是现在出现了XML解析错误。 - Sharique
你遇到了解析XML的错误吗?你使用什么来解析XML?或许你可以更新你的问题,包含响应的XML,这样我们就可以测试它。 - Brian
谢谢伙计,使用text()而不是html()解决了问题。 - Sharique

2
  use it.

   <script>
        alert("aaa");
    $.ajax({
        type: "POST",
        url: "MyService.asmx/HelloWorld",
        data: "{}",
        dataType: "xml",
        contentType: "application/xml; charset=utf-8",
        success: function (data) {
        alert(data);//data-object xmldocument
        edata = $(data).children("string").text();
        alert(edata);

        }
    });
    alert("bbb");
    </script>

2

我建议在您的Tasks.asmx类中添加[ScriptService]属性,这样它将接受并响应JSON而不是XML。您的客户端代码看起来很好,但您需要查看成功处理程序中的"data.d"而不是"data"。


1

你说dataType是JSON,但contentType是XML。试试这样:

contentType: "application/json; charset=utf-8",

如果不是这样,那么我们就需要查看asmx代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接