2017-01-10 76 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); }