我有一个简单的表,它在MVC局部视图中呈现,并通过jQuery ajax调用返回给客户端。
以下是成功回调的简化版本:
function (html, status, xhr)
{
html = $(html); //Get html table as a jQuery object
var tblClass = html.attr("class");
}
现在在IE9中,我得到的表类没有问题。在FF5中它失败了。我在Firebug中调试,发现在返回的html字符串中的<table>
标记之前有一个“\ r \ n”。这并不奇怪,因为在部分视图中<table>
标记上方有一个空白行,以便于阅读。
运行html = $(html);
时,我发现jQuery对象中有2个元素,而不是获得一个带有单个表元素的jQuery对象。
元素[0]在FireBug中显示为:
<TextNode textContent=";\n">
元素[1]是我的表,这导致了问题。我期望的是我在IE9中得到的,这是一个只包含单个元素(表)的jQuery对象。我不知道为什么将空格转换为<TextNode textContent=";\n">
以下是我的观点:
@model IDataPage<EssenceNet.Domain.Transforms.EssenceResult>
<table class="csGrid">
<tr>
<th data-sort="Name" class='a' style="min-width:50px"><a></a>Name</th>
<th data-sort="EssenceTypeID" style="min-width:50px"><a></a>Type</th>
<th style="width:100%">Description</th>
</tr>
@foreach (var r in Model.Items)
{
<tr data-id="@r.EssenceID">
<td style="color:#265E15">@r.Name</td>
<td>@r.Type</td>
<td>@r.Description.MaxLength(100)</td>
</tr>
}
@Html.WritePagerRow(Model);
</table>
这是ajax调用(我尝试了几种不同的方式)所有相同的结果:
$.ajax({
url: url,
type: 'POST',
returnType: 'html',
data: JSON.stringify(data),
contentType:'application/json',
success: successFunc
});
任何想法为什么会发生这种情况以及如何处理它?</ p>
感谢您的帮助。
答案 0 :(得分:1)
确保在制作ajax请求时dataType=html
或
您可以$(html).find('TextNode').remove().end()
或
向我们展示您的观点和ajax选项
修改1
在此行@Html.WritePagerRow(Model);
中,尝试删除分号
修改2
我想建议的是,当你得到一些意想不到的结果时使用ajax,最好的办法就是
A&GT;看看你在firebug中的反应(大多数人通常会这样做)
B个通过直接在浏览器中输入url来查看您的回复。 (这解决了很多问题)
答案 1 :(得分:1)
您的问题是以下后的分号:
@Html.WritePagerRow(Model);
如果仔细观察Visual Studio,您会发现分号不是浅灰色背景而是白色背景。这意味着它被视为HTML代码,而不是C#代码。
删除分号,你的问题就会消失。
答案 2 :(得分:0)
我不会说空白是问题,但更有可能是新行之前的;
字符?
答案 3 :(得分:0)
将返回值换行并将整个事物转换为jQuery对象。