4

ページ自体に AJAX 呼び出しを作成し、値を返すリンクがページにあります。正常に作成されたサーバーによって生成された応答が空になったり、AJAX のエラー関数になったりすることがあります。私はほとんどすべてを試しましたが、解決策を思い付くことができませんでした。

ここに私のAJAX関数があります:

var Ajax = {
    AjaxCall: function (uri, jsonData, callBack, postParams) {
        $.ajax({
            cache: false,
            type: "POST",
            url: uri + ((uri.indexOf("?") > -1) ? "&" : "?") + "rand=" + new Date().format("ssmmHHddMMyyyy"),
            data: JSON.stringify(jsonData),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                Ajax.AjaxCall_CallBack(msg, callBack, postParams);
            },
            error: function (msg) {
                Ajax.AjaxCall_CallBack_Error(msg);
            }
        });
    },

    AjaxCall_CallBack: function (msg, callBack, postParams) {
        callBack(msg, postParams);
    },

    AjaxCall_CallBack_Error: function (msg) {
        alert(msg.responseText);
    }
}

関数はAJAX呼び出しを行います

Ajax.AjaxCall('dummypage.aspx?ajax=6&edit=1&uID=' + uID, null, callback_func, [uID, 'Test Text', 0])

サーバーから生成される値は次のようなものです。

Table tbl;
TableRow tr;
TableCell tc;
Label lbl;
DropDownList ddl;

tbl = new Table();
tr = new TableRow();

tc = new TableCell();
lbl = new Label();
lbl.Text = "Choose one"
tc.Controls.Add(lbl);
tr.Cells.Add(tc);

tc = new TableCell();
ddl = new DropDownList();
ddl.Items.Add("Choose", "-1"));
ddl.Items.Add("First", "1");
ddl.Items.Add("Second", "2");
ddl.ID = "ddlContentType";

tc.Controls.Add(ddl);
tr.Cells.Add(tc);

tbl.Rows.Add(tr);

StringBuilder sb = new StringBuilder();
StringWriter tw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(tw);

tbl.RenderControl(hw);
string renderedValue = sb.ToString();
hw.Close();

return HttpUtility.JavaScriptStringEncode(renderedValue, true);

同じ手順を持つ同じページのまったく同じ構造が機能するのに、これが機能しない理由がわかりませんか?

前もって感謝します。

4

2 に答える 2

2

このような奇妙な ajax/WCF/webservice の動作がある場合、あなたを助けることができる唯一のものはFiddlerです

何が起こっているかを確認し、リクエストとレスポンスを分析するのに役立ちます。

とにかく、ベストプラクティスとして、html全体ではなく、htmlをajaxで埋めるためにデータのみを渡す必要があります

于 2013-02-12T09:14:17.963 に答える