2015-06-22 80 views
0

我正在寫一個小的Cordova(PhoneGap)應用程序。即從文件輸入發送圖像 - 使用post方法。它在我的Android設備上正常工作,但在broswer和Ripple模擬器中都失敗。下面是代碼:Http Post image在瀏覽器/紋波模擬器中失敗

function queryImageByData(dataURL) { 

    var imgType = dataURL.substring(5, dataURL.indexOf(";")); 
    var imgExt = imgType.split("/")[1]; 
    var imgData = atob(dataURL.substring(dataURL.indexOf(",") + 1)); 

    var filenameTimestamp = (new Date().getTime()); 

    var separator = "----------12345-multipart-boundary-" + filenameTimestamp; 
    var formData = "--" + separator + "\r\n" + 
    "Content-Disposition: file; name=\"file\"; filename=\"snapshot_" + filenameTimestamp + "." + imgExt + "\"\r\n" + 
    "Content-Type: " + imgType + "\r\nContent-Transfer-Encoding: base64" + "\r\n\r\n" + imgData + "\r\n--" + separator + "\r\n"; 


    var xhr = new XMLHttpRequest(); 


    xhr.sendAsBinary = function (data) { 
     var arrb = new ArrayBuffer(data.length); 
     var ui8a = new Uint8Array(arrb, 0); 
     for (var i = 0; i < data.length; i++) { 
      ui8a[i] = (data.charCodeAt(i) & 0xff); 
     } 

     var blob = new Blob([arrb]); 
     this.send(blob); 
    }; 


    xhr.open("POST", "https:/my_endpoint_here", true); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { 
      if (xhr.status == 200) { 
       parseResult(xhr.responseText); 
      } 
      else { 
       onFailedResponse(xhr.responseText); 
      } 
     } 
    }; 

    xhr.setRequestHeader("Content-type", "multipart/form-data; boundary=" + separator); 
    xhr.sendAsBinary(formData); 
} 

我得到的錯誤是:

Error: MultipartParser.end(): stream ended unexpectedly: state = HEADER_FIELD_START 
    at MultipartParser.end 

編輯:

我有一個問題也與get方法。它在Ripple/Browser上失敗,但在設備上運行正常。這裏有一些示例代碼:

var url = document.getElementById("urlInput").value; 

    var query = "my_url_here";  
    var jqxhr = $.ajax(query) 
    .done(function (data) { 
     alert("success" + data); 
    }) 
    .fail(function (data) { 
     alert("error" + data); 
    }) 

回答

0

那麼我發現了核心問題,它跨域調用。 瀏覽器不允許它,並且Ripple仿真器 也是如此,但移動設備確實允許。 現在我只需要弄清楚如何使用CORS工作。