Питання Jquery Ajax, повернення успіху / помилки з контролера mvc.net


Я хотів би контролювати, коли відповідати на повідомлення про помилку та коли повідомлення про успіх, але я завжди отримую повідомлення про помилку:

ось що я намагаюся зробити:

 $.ajax({
                type: "POST",
                data: formData,
                url: "/Forms/GetJobData",
                dataType: 'json',
                contentType: false,
                processData: false,

                success: function (response) {                    
                   alert("success!") 
                },
                error: function (response) {
                   alert("error") // I'm always get this.
                }

            });

Контролер:

         [HttpPost]
            public ActionResult GetJobData(Jobs jobData)
            {

              var mimeType = jobData.File.ContentType;
              var isFileSupported = AllowedMimeTypes(mimeType);

             if (!isFileSupported){        
                     //  Error
                    Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    return Content("The attached file is not supported", MediaTypeNames.Text.Plain);    
             }
            else
              {
                    //  Success
                    Response.StatusCode = (int)HttpStatusCode.OK;
                    return Content("Message sent!", MediaTypeNames.Text.Plain);     

               }   

            }

46
2017-10-28 09:42


походження


Додайте if стан ... Я не знаю, яку відповідь ви очікуєте тут. - Rory McCrossan
Ваша помилка виявлення, тому що код після першого звіту про повернення не виконується. Можливо, ви захочете перенести код після коментарів до успіху, перед попереднім звітом про повернення. - Collins
Я виправив питання. тепер моє запитання ясно. - Eyal


Відповіді:


 $.ajax({
    type: "POST",
    data: formData,
    url: "/Forms/GetJobData",
    dataType: 'json',
    contentType: false,
    processData: false,               
    success: function (response) {
        if (response.success) {
            alert(response.responseText);
        } else {
            // DoSomethingElse()
            alert(response.responseText);
        }                          
    },
    error: function (response) {
        alert("error!");  // 
    }

});

Контролер:

[HttpPost]
public ActionResult GetJobData(Jobs jobData)
{
    var mimeType = jobData.File.ContentType;
    var isFileSupported = IsFileSupported(mimeType);

    if (!isFileSupported){        
         //  Send "false"
        return Json(new { success = false, responseText = "The attached file is not supported." }, JsonRequestBehavior.AllowGet);
    }
    else
    {
        //  Send "Success"
        return Json(new { success = true, responseText= "Your message successfuly sent!"}, JsonRequestBehavior.AllowGet);
    }   
}

--- Доповнення: ---

в основному ви можете відправити кілька параметрів таким чином:

Контролер:

 return Json(new { 
                success = true,
                Name = model.Name,
                Phone = model.Phone,
                Email = model.Email                                
            }, 
            JsonRequestBehavior.AllowGet);

Html:

<script> 
     $.ajax({
                type: "POST",
                url: '@Url.Action("GetData")',
                contentType: 'application/json; charset=utf-8',            
                success: function (response) {

                   if(response.success){ 
                      console.log(response.Name);
                      console.log(response.Phone);
                      console.log(response.Email);
                    }


                },
                error: function (response) {
                    alert("error!"); 
                }
            });

88
2017-10-28 10:26



contentType: 'application/json; charset=utf-8' або false? І чому? - Clint Eastwood
чудове рішення спасибі - Dipal Kothari
Я додав вміст type: 'application / json; charset = utf-8 ', processData: false, і це працювало для мене. - Anjan Kant
@ClintEastwood contentType - це тип даних, який ви надсилаєте, тому його потрібно встановити на json, дуже часто - 'application / json; charset = utf-8 '. - Paul Zahra


Використовуйте Json клас замість Content як показано нижче:

    //  When I want to return an error:
    if (!isFileSupported)
    {
        Response.StatusCode = (int) HttpStatusCode.BadRequest;
        return Json("The attached file is not supported", MediaTypeNames.Text.Plain);
    }
    else
    {
        //  When I want to return sucess:
        Response.StatusCode = (int)HttpStatusCode.OK; 
        return Json("Message sent!", MediaTypeNames.Text.Plain);
    }

Також встановити тип contentType:

contentType: 'application/json; charset=utf-8',

18
2017-10-28 10:07



contentType: 'application/json; charset=utf-8' або false? І чому? - Clint Eastwood
Мені подобається ця відповідь на приклад Response.StatusCode встановити - Alexander Stepaniuk
@ClintEastwood contentType - це тип даних, який ви надсилаєте, тому його потрібно встановити на json, дуже часто - 'application / json; charset = utf-8 '. - Paul Zahra
гарна вона повинна бути належною відповіддю - RAHUL S R