Vanilla JS Ajax和base64img问题

时间:2014-10-07 09:52:31

标签: javascript ajax base64

我正在使用一个使用canvas元素将图像编码为base64的函数对图像进行编码 然后我尝试通过AJAX将Base64字符串发布到我的php ajax_controller

function submitParticipation(name,email,phone,city) {
    encodeImage(uploadedImg, function(encodedImage) { 
        uploadedImg = encodedImage;
    });

    var ajax = new XMLHttpRequest();
    var params = 'uid='+ facebookUserId + '&name=' + name  + '&email=' + email +
        '&phone=' + phone + '&city=' + city + '&img_string=' + base64Img +
        '&facebook_name=' + facebookUserFullName + '&facebook_pic=' +
         facebookProfilePic + '&facebook_email=' + facebookUserEmail;

    ajax.open("POST", "main_ajax_controller.php?m=store_participation", true);
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.send(params);
    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4 && ajax.status == 200) {
            var response = ajax.responseText;
        }            //If an error occur during the ajax call.
        if (ajax.readyState == 4 && ajax.status == 404) {

        }
    }
}

base64Img虽然没有通过AJAX调用 - 它会通过空。

知道为什么吗?

base64Img变量定义得很好 - 我可以看到这个,因为我在Ajax调用的params变量中定义它之前就在控制台中记录它。

1 个答案:

答案 0 :(得分:1)

您的params字符串无效,因为您没有对每个值进行编码。所有这些,包括base64值都应该包含在encodeURIComponent()

例如:

base64Img = encodeURIComponent(base64Img);

Base64值包含一个=字符,它打破了密钥对字符串。