2017-01-10 4 views
0

Dies ist mein Ajax-Code, die eine Formdata mit einer Datei übermitteln. wenn ich entferne meine benutzerdefinierte Zeichenfolge „hat“ immer-Datei, die Werke und „1234567“ .i erwarten zurückkehren muss „hat Datei 1234567“, sondern immer werfen [object] ObjektMVC Ajax-Return-String als [Objekt] Objekt

$(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; 
      } 
     }); 
    }); 
}); 

-Controller

zurück
+0

überprüfen, ob Sie sind Erhalten einer 200 OK-Antwort für Ihren Ajax-Anruf – Shyju

+1

Sie können tatsächlich keine Zeichenfolge von einem Ajax-Aufruf zurückgeben. Geben Sie stattdessen ein JSON-Objekt zurück. Ändern Sie den Rückgabetyp in JsonResult: 'public JsonResult scancode (HttpPostedFileBase scan)' und anstelle von 'return str;' return the Json: 'return Json (neu {someString = str});' und in Ihrem Ajax-Aufruf: 'success: Funktion (Daten) {$ ('# barcode'). val (data.someString); } ' – Kapobajza

+1

ist der' dataType: "json", 'in diesem Fall richtig? Ich denke nicht, dass Dateien über Ajax veröffentlicht werden können ... kann mich jemand korrigieren. – Searching

Antwort

1

Sie müssen immer eine JsonResult von einem Controller an die Ajax-Abfrage zurückgeben. Konvertieren Sie die Zeichenfolge JsonResult von Json(stringvalue);

Ihr Code verwendet wird werden:

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

Sie können nicht wirklich eine Zeichenfolge aus einem Ajax-Aufruf zurück. Geben Sie stattdessen ein JSON-Objekt zurück. Ändern Sie den Rückgabetyp JsonResult :

public JsonResult scancode(HttpPostedFileBase scan) 

Und statt return str; Rückkehr der Json:

return Json(new { someString = str }); 

Schließlich Ihre Ajax-Aufruf wie folgt aussehen sollte:

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