1

文字列と画像を含む個人プロファイルを入力するための HTML フォームがあります。そして、1 回のバックエンド API 呼び出しでこれらすべてのデータを JsonObject として投稿する必要があり、バックエンドにはバイナリ データとして送信される画像ファイルが必要です。これが私のJsonデータです。

var profile = {
            "userId"                : email_Id,
            "profile.name"              : "TML David",
            "profile.profilePicture"        : profilePhotoData,
            "profile.galleryImageOne"       : profileGalleryImage1Data,
            "profile.referenceQuote"        : "Reference Quote"
    }; 

また、profilePhotoData、profileGalleryImage1Data、profileGalleryImage2Data、profileGalleryImage3Data はすべて画像のバイナリ データ (Base64) です。

そして、ここに私の事後関数があります:

function APICallCreateProfile(profile){
    var requestUrl = BASE_URL + API_URL_CREAT_PROFILE;

    $.ajax({
        url: requestUrl,
        type: 'POST',
        data: profile,
        dataType:DATA_TYPE,
        contentType: CONTENT_TYPE_MEDIA,
        cache:false,
        processData:false,
        timeabout:API_CALL_TIMEOUTS,
        success: function (response) {
            console.log("response " + JSON.stringify(response));
             var success = response.success;
             var objectData = response.data;
             if(success){
                 alert('CreateProfile Success!\n' + JSON.stringify(objectData));
             }else{
                 alert('CreateProfile Faild!\n'+ data.text);
             }
        },
        error: function(data){
             console.log( "error" +JSON.stringify(data)); 
        },
        failure:APIDefaultErrorHandler
    })
    .done(function() { console.log( "second success" ); })
    .always(function() { console.log( "complete" ); });


    return false;
}

しかし、それでも失敗しました。サーバー側を確認したところ、「マルチパート境界が見つかりませんでした」というエラーが表示されました。

誰でもこれで私を助けることができます、ありがとう:)

更新: var DATA_TYPE = "json"; var CONTENT_TYPE_MEDIA = "マルチパート/フォームデータ";

4

2 に答える 2

3

vineetの助けを借りて解決策を見つけたと思います。私は XMLHttpRequest を使用しており、requestHeader を設定していませんが、非常に奇妙に機能します。しかし、この以下が役立つことを願っています

function APICallCreateProfile(formData){
            var requestUrl = BASE_URL + API_URL_CREAT_PROFILE;
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange=function()
            {
              if (xhr.readyState==4 && xhr.status==200){
                  console.log( "profile:" + xhr.responseText); 
              }else if (xhr.readyState==500){
                  console.log( "error:" + xhr.responseText); 
              }
            }


            xhr.open('POST', requestUrl, true);
            //    xhr.setRequestHeader("Content-Type","multipart/form-data; boundary=----WebKitFormBoundarynA5hzSDsRj7UJtNa");
            xhr.send(formData);

            return false;
         }
于 2013-06-12T01:54:43.967 に答える
0

車輪を再発明する理由。こちらのJqueryフォームプラグインを使用してください。マルチパートアップロードの例もあります。

入力タイプをファイルとして設定するだけです。サーバーで入力ストリームとしてファイルを受け取ります(もちろん、それらはマルチパートになります)

于 2013-06-03T08:23:05.470 に答える