Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vanilla JS Ajax和base64img问题_Javascript_Ajax_Base64 - Fatal编程技术网

Javascript Vanilla JS Ajax和base64img问题

Javascript Vanilla JS Ajax和base64img问题,javascript,ajax,base64,Javascript,Ajax,Base64,我正在使用一个函数对图像进行编码,该函数使用canvas元素将图像编码为base64。 然后我尝试通过AJAX将Base64字符串发布到我的phpAJAX\u控制器中: function submitParticipation(name,email,phone,city) { encodeImage(uploadedImg, function(encodedImage) { uploadedImg = encodedImage; }); var aja

我正在使用一个函数对图像进行编码,该函数使用canvas元素将图像编码为base64。
然后我尝试通过AJAX将Base64字符串发布到我的php
AJAX\u控制器中:

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调用,但它通过empty调用

知道为什么吗


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

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

例如:

base64Img = encodeURIComponent(base64Img);

Base64值包括一个
=
字符,该字符会破坏密钥对字符串。

如果只是Base64'='破坏了该字符串,那么为什么其他参数需要这个字符?其他特殊字符(不仅仅是
=
&
)需要进行编码,以符合
应用程序/x-www-form-urlencoded
标准格式。即使您相信这些值中不会有特殊字符,编码仍然是一种很好的做法。