2016-06-01 45 views
0

我試圖使用FORMDATA到上傳的圖片傳+兩個額外的參數使用FORMDATA方法從我的Ajax方法,我的Web服務的WebMethod這裏:傳遞更多然後1點的值通過Ajax

var formData = new FormData(); 
    formData.append('file', $('#photo')[0].files[0]); 
    formData.append('u', "test"); 
    formData.append('s', "Testing"); 

我的Ajax調用概述如下所示:

 $.ajax({ 
      url: "/admin/WebService/test.asmx/UploadImage", 
      type: "POST", 
      processData: false, 
      contentType: false, 
      data: formData, 
      success: function (response) { 
       console.log(response); 
      }, 
      error: function (er) { 
       alert(er); 
      } 

     }); 

調用該的WebMethod:

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string UploadImage() 
    { 

     if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any()) 
     { 
      var t= System.Web.HttpContext.Current.Request.Files["s"]; 
      var c= System.Web.HttpContext.Current.Request.Files["u"]; 
      var p = System.Web.HttpContext.Current.Request.Files["file"]; 
     } 
     else 
     { 
      return "Error"; 
     } 

     return "Error"; 
    } 

的問題,我'm have是參數'u'和's'在引用文件時我能夠得到它的值。

在搜索網頁的同時,我在印象之下可以指定使用此方法時需要的許多鍵/值,除非我誤導了信息?有人可以請說明爲什麼這兩個參數爲空?提前致謝。

回答

1
This works for me: 


var formData = new FormData(); 
      formData.append("UserId", userId);    
      formData.append("RequestPhoto", imageFile); 
      formData.append("RequestVoiceRecord", voiceFile); 
      formData.append("Latitude", latitude); 
      formData.append("Longitude", longtitude); 

     $.ajax({ 
      type: "POST", 
      url: "/User/CreateRequest", 
      data: formData, 
      contentType: false, 
      processData: false, 

      success: function() { 
       alert("OK"); 
      }, 
      error: function() { 
       alert("Error"); 
      } 

     }); 

控制器:

public class UserController : ApiController 
    {   

     [HttpPost] 
     public int CreateRequest() 
     { 

      // HttpResponseMessage result = null; 
      var httpRequest = HttpContext.Current.Request; 

      var req = new UserRequest 
      { 
       UserId = Guid.Parse(httpRequest.Form["UserId"]),          
       Photo = httpRequest.Files["RequestPhoto"], 
       VoiceRecord = httpRequest.Files["RequestVoiceRecord"] 
       Latitude = float.Parse(httpRequest.Form["Latitude"]), 
       Longitude = float.Parse(httpRequest.Form["Longitude"]), 
      }; 
+0

也爲我工作,謝謝 –

1

你應該創建一個json而不是創建這個東西,添加你想通過ajax發送的任何密鑰。

var formData = {'u':'value','s':'value'} 

$.ajax({ 
      url: "/admin/WebService/test.asmx/UploadImage", 
      type: "POST", 
      processData: false, 
      contentType: false, 
      data: JDON.Stringify(formData), 
      success: function (response) { 
       console.log(response); 
      }, 
      error: function (er) { 
       alert(er); 
      } 

     }); 

嘗試使用這種方式。

+0

我已經改變了我的代碼以符合您指定的內容,但是現在我沒有設置按鍵,我將如何去拉動值出它自己的web服務內的formData? –

+0

你從服務中獲得迴應。打開你的瀏覽器的控制檯,並檢查它返回什麼迴應? –