【问题标题】:ajax function is not returning expected outputajax 函数没有返回预期的输出
【发布时间】:2016-09-28 09:35:02
【问题描述】:

控制器正在返回:

return Json(new { html = "<html><body>HELLO</body></html>" },JsonRequestBehavior.AllowGet);

这只是一个字符串'HELLO'

我的json函数如下:

function callPrint() {
        var PrintCssContent = "";

        $.ajax({
            url: '@Url.Action("GetHtmlString", "Itinerary", new { area = "Travel" })',
            dataType: "text",
            success: function (data) {
                alert(data);

                WinPrint.document.write(data);
                WinPrint.document.write(DivMainContent.innerHTML.toString());
                WinPrint.document.write("</body></html>");
                WinPrint.document.close();
                WinPrint.focus();
                WinPrint.print();
                WinPrint.close();
            },
            error:function(){
                alert('error');
            }
        });
        return false;
    }

但是 json alert 正在返回如下内容: {"html":"\u003chtml\u003e\u003cbody\u003eHELLO\u003c/body\u003e\u003c/html\u003e"}

如何使用我的 json 函数简单地返回“HELLO”?

【问题讨论】:

  • 抱歉是AJAX功能
  • 要只返回“HELLO”,您应该返回一个带有html 等于“HELLO”的json。您将其包裹在 HTML 标记中。进一步使用data.html
  • 我将从我的 mvc 控制器 ActionResult 返回整个 html 页面。所以首先我试图返回 return Json(new { html = "HELLO" }, JsonRequestBehavior.AllowGet);仅用于测试目的。
  • 我可以给出的一个提示是在控制台中写入输出。 firefox 和 chrome 都提供带有详细视图的日志。你可以很容易地理解你从 ajax 响应中得到了什么。前 - console.log(data);
  • 如果我删除警报(parseData.html);我不想在警报框中显示数据,而是想使用 window.print 打印它,那么我该如何实现呢?

标签: javascript ajax asp.net-mvc-4 model-view-controller


【解决方案1】:

您需要使用JSON.Parse 来返回JSON 数据。将您的 alert 语句更改为,

 var parseData = JSON.parse(data);
 alert(parseData.html);

希望这会有所帮助!

【讨论】:

  • 它正在返回:[object Object]
  • 这里不需要解析。他有一个包含 HTML 标记的字段的 JSON,所以他只需要附加 data.html
  • @whitelettersinblankpapers 但他的 JSON(正如他在这里提到的)中包含 unicode 字符。 {"html":"\u003chtml\u003e\u003cbody\u003eHELLO\u003c/body\u003e\u003c/html\u003e"} 需要在显示之前对其进行解析。
  • @rohit 更新了我的答案。请检查。
  • 是的,你说得对,我必须解析 unicode 字符。让我看看你的解决方案。
【解决方案2】:

需要将结果转成json,然后打印出来,代码如下:

function callPrint() {
    var PrintCssContent = "";

    $.ajax({
        url: '@Url.Action("GetHtmlString", "Itinerary", new { area = "Travel" })',
        dataType: "text",
        success: function (data) {
            var dataParsed = JSON.parse(data);
            WinPrint.document.write("<html><body>");
            WinPrint.document.write(dataParsed.html);
            // WinPrint.document.write(DivMainContent.innerHTML.toString());
            WinPrint.document.write("</body></html>");
            WinPrint.document.close();
            WinPrint.focus();
            WinPrint.print();
            WinPrint.close();
        },
        error:function(){
            alert('error');
        }
    });
    return false;
}

【讨论】:

  • 它返回“未定义”
  • 奇怪,试试 data['html'] 或 data[0].html // 不太可能最后的想法是 var parsedData = JSON.parse(data);警报(parsedData.html)
  • 如果我删除警报(parseData.html);我不想在警报框中显示数据,而是想使用 window.print 打印它,那么我该如何实现呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
相关资源
最近更新 更多