【问题标题】:Ajax Request to Web Method Returning document object instead of text or JSON对 Web 方法的 Ajax 请求返回文档对象而不是文本或 JSON
【发布时间】:2012-11-02 15:25:14
【问题描述】:

我有一个对 Web 服务的 ajax 调用,我想将一些 JSON 返回到视图。但是,现在,如果我提醒调用结果,我会得到“对象文档”。我尝试改变内容类型但没有骰子。这是当前状态下的 ajax 调用:

$.ajax({
    type: "GET",
    url: "services/offerService.asmx/getUploadedDocs",
    contentType: 'text/html',
    data: {offerID : offerId},
    success: function(result) {
        $.each(result, function(index) {
        alert(result.toString());
        $(element).closest('ul.uploadedDocs').append('<li id="uploadedDoc-'+(index+"") + '" class = "uploadedDocument"><span id="uploadedDocTitle">Title: '+ result["title"] + '</span><span id="uploadedDocUploadedBy>Uploaded By: ' + result["uploadedBy"] + '</span></li>');
        });                     
    }
});

这是网络方法:

[WebMethod]
public object getUploadedDocs(string offerID)
{
    string sql = "SELECT * FROM [dbo].[uploaded_documents] WHERE primary_offer_id = @offerId";
    IList<UploadedDocument> uploadedDocs = new List<UploadedDocument>();
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["production"].ToString()))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add("@offerId", SqlDbType.Int);
        cmd.Parameters["@offerId"].Value = offerID;
        DataTable dt = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        adapter.Fill(dt);
        adapter.Dispose();
        uploadedDocs = dt.ToList<UploadedDocument>();
    }

    StringBuilder json = new StringBuilder();
    json.Append("{");
    int count = 1;
    foreach (UploadedDocument doc in uploadedDocs)
    {
        json.Append("{doc"+count.ToString()+":"+"{\"title\": " + doc.docTitle + ", \"uploadedBy\": " + doc.uploadedBy + ", \"uploadDate\": " + doc.uploadDate.ToLongDateString() + "},");
    }
    if(json.ToString().Contains(","))
        json = json.Remove(json.ToString().LastIndexOf(','), 1);
    json.Append("}");
    return json.ToString();
}

我可以将其作为object() 发回,但我更愿意将其保留为字符串并将其解析为 JSON。有任何想法吗?

【问题讨论】:

    标签: c# ajax json jquery webmethod


    【解决方案1】:

    首先,您需要将 ajax 调用中的 contentType 更改为“json”。

    然后尝试调用

    alert(JSON.stringify(result));
    

    看看它给了你什么。假设您正在正确构建 json 对象,它应该可以工作。还可以下载firebug 看看返回了什么。

    编辑:

    我不确定您上传的Docs 对象是什么样的,但请尝试做

    return Json(uploadedDocs);
    

    在你的方法中。

    JK 您正在使用 WebForms (?),因此要将其解析为 Json 对象,请参阅 here

    【讨论】:

    • JSON 还是应用程序/json?我以前有后者,并且得到了相同的结果。
    • contentType 是您发送到服务器的类型,所以无论 offerID 是什么。您想将 dataType 设置为“json”,这是您从服务器接收的类型。
    • 老实说,我通常也不设置。 JS 将使用上下文来解决它。
    • 是的,我也没有。这就是为什么我对此感到好奇。该框架非常适合将您的数据强制转换为最方便的任何数据类型..
    • 我将其设置为返回 new{data = myData} 形式的对象,现在它在响应中发送回文本/纯文本。所以也许这不仅仅是一个框架问题一个编码问题,我不知道..
    猜你喜欢
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多