我尝试动态加载选项卡的内容。Source 是由 [WebMethod] 属性修饰的 ASP.NET 方法。
[WebMethod]
public static string Result()
{
return RenderControl("WebUserControl1.ascx");
}
当此代码加载选项卡时,它工作正常:
<div id="tabs">
<ul>
<li><a href="#tabs-1">Dynamic User Control</a></li>
</ul>
<div id="tabs-1">
</div>
</div>
$.ajax({
type: "POST",
url: "WebForm1.aspx/Result",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$('#tabs-1').html(msg.d);
},
error: function (msg){
$('#tabs-1').html('Cannot load');
}
});
但是,当标签的定义不同时:
<div id="tabs">
<ul>
<li><a href="WebForm1.aspx/Result">Dynamic user Control</a></li>
</ul>
<div id="tabs-1">
</div>
</div>
然后此调用加载整个页面内容并将其放入选项卡中。因此,我尝试将数据类型更改为 json,但随后整个选项卡加载在 ajax 调用中的某处失败。
$("#tabs").tabs({
beforeLoad: function (event, ui) {
ui.ajaxSettings.accepts = { json: "application/json, text/javascript" };
ui.ajaxSettings.contentType = "application/json; charset=utf-8";
ui.ajaxSettings.type = "POST";
ui.ajaxSettings.dataTypes[0] = "json";
ui.jqXHR.error = function () {
$('#tabs-3').html('Cannot load');
}
},
});
检查了随请求发送了哪些标头,并且这些对 ajaxSettings 的修改根本不会发送到服务器。
你能指出我正确的方向吗?
使用的 JQuery-UI 版本是 1.10.0。使用的 JQuery 版本是 1.9.0。
编辑:在 Firebug 中检查 Content-Type 标头未根据 ajaxSettings 设置为 application/json。因此网页以 text/html 响应进行响应。确认如果请求标头被强制为 json(通过 live headers firefox addon),则返回 json 响应。有没有办法强制标签传递正确的 http 标头?