2017-01-10 74 views
0

這是我的ajax代碼提交一個formdata與文件。 如果我刪除我永遠的自定義字符串「有」文件,該文件將作品並返回「1234567」。我是期待返回了「有文件1234567」,但總是拋出[對象]對象MVC ajax返回字符串作爲[對象]對象

$(document).ready(function() { 
    $('#scan').change(function (e) { 
     debugger 

     var element = this; 
     var formData = new FormData(); 
     var totalFiles = document.getElementById("scan").files.length; 

     var file = document.getElementById("scan").files[0]; 
     formData.append("scan", file); 
     $.ajax({ 
      url: '@Url.Action("scancode", "Products")', 
      type: "POST", 
      dataType: "json", 
      data: formData, 
      processData: false, 
      contentType: false, 
      success: function (data) { 

       $('#barcode').val(data);     
      }, 
      error: function (err) { 

       document.getElementById('emsg').innerHTML = err; 
      } 
     }); 
    }); 
}); 

控制器

public string scancode(HttpPostedFileBase scan) { 
     var str = ""; 
     if (scan !=null) 
     { 
      str = "has file"; 
     } 

     try 
     { 


     IBarcodeReader reader = new BarcodeReader(); 
     // load a bitmap 
     var barcodeBitmap = (Bitmap)Bitmap.FromStream(scan.InputStream); 
     // detect and decode the barcode inside the bitmap 
     var result = reader.Decode(barcodeBitmap); 
     // do something with the result 
     if (result != null) 
     { 
      str =str+ result.Text; 
     } 
     } 
     catch (Exception ex) 
     { 

      str = ex.Message; 
     } 
     return str; 
    } 
+0

檢查您是否爲您的ajax調用獲取200 OK響應 – Shyju

+1

您實際上無法從ajax調用返回字符串。而是返回一個JSON對象。將返回類型更改爲JsonResult:'public JsonResult scancode(HttpPostedFileBase scan)'而不是'return str;'返回Json:'返回Json(new {someString = str});'並在您的ajax調用中:'success:函數(data){$('#barcode').val(data.someString); }' – Kapobajza

+1

是'dataType:「json」,'在這種情況下是正確的?我不認爲文件可以通過Ajax張貼....有人可以糾正我。 – Searching

回答

1

您必須始終將控制器的JsonResult返回給ajax查詢。通過使用Json(stringvalue);

您的代碼將成爲簡單的字符串轉換爲JsonResult

public JsonResult scancode(HttpPostedFileBase scan) 
{ 
    var str = ""; 
    if (scan !=null) 
    { 
     str = "has file"; 
    } 
    try 
    { 
     IBarcodeReader reader = new BarcodeReader(); 
     // load a bitmap 
     var barcodeBitmap = (Bitmap)Bitmap.FromStream(scan.InputStream); 
     // detect and decode the barcode inside the bitmap 
     var result = reader.Decode(barcodeBitmap); 
     // do something with the result 
     if (result != null) 
     { 
      str =str+ result.Text; 
     } 
    } 
    catch (Exception ex) 
    { 
     str = ex.Message; 
    } 
    return Json(str); 
} 
1

你不能真正從Ajax調用返回一個字符串。而是返回一個JSON對象。 返回類型更改爲JsonResult

public JsonResult scancode(HttpPostedFileBase scan) 

,取而代之的return str;回報JSON:

return Json(new { someString = str }); 

最後你的Ajax調用應該是這個樣子:

success: function (data) { $('#barcode').val(data.someString); }