在jquery中调用webservice(asmx)时,html以xml形式返回

时间:2011-11-02 16:53:04

标签: c# jquery ajax asmx

我有一个jquery块,可以执行这样的ajax:

    $.ajax({
    url: '/webservices/manager.asmx/addNew',
    type: "POST",
    dataType: "html",
    data: { id: Id, name: Name, dept: Dept, helpId: HelpId },
    success: function (data) {
        //append to the table
        $('#divManagers').append(data); 
    },
    error: function () {
        //console.log('error');
    }
});

所以它传递得很好,asmx接收数据并且我计算东西,然后最后我回复类似的东西:

<div id="divContainer">
         <h2>Manager Name</h2>
</div>

现在,即使我将dataType设置为html,我的回复仍然包含在xml字符串中:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">&lt;div id=divContainer&gt;&lt;/h4&gt;Manager&nbsp;Name&lt;/div&gt;</string>

它们实际上只是附加到页面,完整的文本,而不是作为实际的html元素呈现。

请问是什么?

编辑

我只是在我的asmx中构建html。

之类的东西
StringBuilder component = new StringBuilder();
component.appendFormat("<div id='divComponent'><h2>{0}</h2></div>', managerDataRow["ManagerName"].ToString());
return component.ToString();

我的asmx是一个单独的,正确的asmx页面,而不是普通aspx页面中的[webmethod]方法。感谢。

<小时/> 如果我的实际输出和返回的结果之间存在任何差异这里,那是因为我编辑了它以缩短它。感谢。

3 个答案:

答案 0 :(得分:4)

您可以从响应中创建一个jQuery对象,并从那里读取text值以获得所需的结果。

$('#divManagers').append($(data).text());

此帖也可以回答为什么你没有在回复中找回直接的HTML

How to get clean/pure HTML from ASMX web service call

答案 1 :(得分:1)

您需要将webResponse ContentType设置为:"text/html"

<强>编辑:

但是无论如何你可以返回JSONXML并获取你的数据(使用xpath的XML,JSON只是js对象)并在客户端站点上建立你的div(你可以更好地控制你打印的内容) )。服务应该只提供普通数据而不需要任何HTML内容..

答案 2 :(得分:0)

你能发布C#asmx代码吗?

您可能在响应中设置了ContentType,如下所示:

HttpContext.Current.Response.ContentType = "text/html";

或确保设置返回类型。例如,我的服务:

[WebService]
public class MySvc : WebService {

    [WebMethod (Description="Proxy for MyService")]
    public String Proxy()
    {return "<h1>MyHeader</h1>"}
}

更多关于SO w / jQuery和ASMX的信息:
Calling ASMX from jQuery