конвертировать текстовые данные JSON обратно в оригинал - PullRequest
1 голос
/ 05 ноября 2010

Многие люди рекомендуют оборачивать результат MVC JsonReturn в текстовую область, чтобы хорошо играть с формами jquery и т. Д.

Эта часть имеет смысл, но как мне вернуть объект json в мой код jquery клиента?

Плагин jquery клиента должен выглядеть примерно так:

// Doesn't work since data is "<textarea>{"error":true,"msg":"foo"}</textarea>
success: function (data) {
                // strip textarea tags and convert data to json object
                if (data['error']) {
                    // data['msg']
                }
}

Спасибо, Duffy

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

.html () должен вытащить innerhtml, так что

data = $.parseJSON(data.html());

должно добиться цели

0 голосов
/ 25 августа 2017

Я понимаю, что на этот вопрос дан ответ. У меня был ответ с Content-Type:text/html, как показано ниже.

<textarea>{"ContentEncoding":null,"ContentType":null,"Data":{"prop1":1},"JsonRequestBehavior":1,"MaxJsonLength":null,"RecursionLimit":null}</textarea>

Код клиента для чтения ответа.

 function (xhr) 
 {                                      
        try{
             console.log(xhr.responseText);
             var originalData = $(xhr.responseText);
             var jsonResponse = $.parseJSON(originalData.html()); 
             var propValResult = jsonResponse.Data.prop1;                       
           }
        catch (e) 
        {                          

        };
 }

Ниже приведен код на стороне сервера, где я создаю упакованный ответ.

Пользовательский результат ASP.NET MVC

public class JsonTextWrappedResult : JsonResult
{

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }

        if ((JsonRequestBehavior == JsonRequestBehavior.DenyGet)
            && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
        {
            throw new InvalidOperationException("Get Not Allowed");
        }

        var response = context.HttpContext.Response;
        response.ContentType = !string.IsNullOrEmpty(ContentType) ? ContentType : "application/json";
        if (ContentEncoding != null)
        {
            response.ContentEncoding = ContentEncoding;
        }

        if (Data != null)
        {
            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            string results = "<textarea>" + serializer.Serialize(Data) + "</textarea>";
            response.Write(results);
        }
    }
}

Пример кода контроллера

public JsonTextWrappedResult PracticeInfoFormUpload(HttpPostedFileBase myfile, FormCollection formCollection)
    {


            var data = this.Json(
                            new
                            {
                                prop1 = 1
                            });
            var result = new JsonTextWrappedResult { Data = data, ContentType = "text/html" };
            return result;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...