JQuery UI使用JSON标记beforeLoad方法

时间:2013-01-29 17:23:33

标签: asp.net ajax json jquery-ui-tabs

我尝试动态加载标签的内容。 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(通过实时头文件firefox addon),则返回json响应。有没有办法强制标签传递正确的http标题?

1 个答案:

答案 0 :(得分:0)

UI标签beforeLoad方法基本上是Ajax beforeSend函数。对于你的特殊问题,你必须做这样的事情

ui.jqXHR.setRequestHeader("Accept", "application/json, text/javascript");
ui.ajaxSettings.type = "POST";
ui.ajaxSettings.dataTypes[0] = "json";

这将更改请求的接受标头。