1

我正在制作一个图片上传表单,该表单将在nudejs脚本的帮助下验证上传的图片是否包含裸露。
如果图像不包含裸露,则将被上传。
上传和检查裸露功能运行良好,但问题是我没有找到链接这两种方法的方法,因为检查裸露功能“onImageClick()”的返回来了'undefined',所以我无法检查它是否为真或 false 以通过 调用上传功能$.ajax

这是代码:

$(document).ready(function (e) {
    $("#uploadimage").on('submit',(function(e) {
        e.preventDefault();
        //return onImageClick('previewing'); //previewing is the id of the image in my html file
        //if(onImageClick('previewing')) return;
        var rn = onImageClick('previewing');
        console.log("rn: "+rn); //always get undefined 
        $("#message").empty();
        $('#loading').show();

        $.ajax({
          url: "ajax_php_file.php",
          type: "POST",            
          data: new FormData(this),
          contentType: false,      
          cache: false,            
          processData:false,       
          success: function(data) {
             $('#loading').hide();
             $("#message").html(data);
          }
      });
}));

// Function to preview image after validation
$(function() {
    $("#file").change(function() {
        $("#message").empty(); // To remove the previous error message
        var file = this.files[0];
        var imagefile = file.type;
        var match = ["image/jpeg","image/png","image/jpg"];
        if(!((imagefile==match[0]) || (imagefile==match[1]) || (imagefile==match[2]))) {
           $('#previewing').attr('src','no-preview.png');
           $("#message").html("<p id='error'>Please Select A valid Image File</p>"+"<h4>Note</h4>"+"<span id='error_message'>Only jpeg, jpg and png Images type allowed</span>");
           return false;
        }
        else
        {
            var reader = new FileReader();
            reader.onload = imageIsLoaded;
            reader.readAsDataURL(this.files[0]);
         }
     });
});

function imageIsLoaded(e) {
    $("#file").css("color","green");
    $('#image_preview').css("display", "block");
    $('#previewing').attr('src', e.target.result);
    $('#previewing').attr('width', '250px');
    $('#previewing').attr('height', '230px');
};
//check nudity function
function onImageClick(node) {
    nude.load(node);
    // Scan it
    nude.scan(function(result){ 
        console.log(result ? "Nudity found in " + node + "!" : "Not nude");
                console.log("returned value is:",result);
                return result;
    });
}
});

编辑:我根据@Amir 的回答编辑代码,他提到了一个我以前没有注意到的重要点。
现在我可以在没有裸露的情况下触发上传功能,但是即使触发了 ajax 调用中的成功功能,图像也没有上传:

    success: function(data)   
    {
    $('#loading').hide();
    $("#message").html(data);
    }

这是新代码:

$(document).ready(function (e) {
$("#uploadimage").on('submit',(function(e) {
e.preventDefault();
//call check nudity function
onImageClick('previewing');
//check nudity function
function onImageClick(node) {
    nude.load(node);
    // Scan it
    nude.scan(function(result){ 
        console.log(result ? "Nudity found in " + node + "!" : "Not nude");
                console.log("returned value is:",result);
                if(result){
                    alert("conatain nudity!!");
                }
      else{
            $("#message").empty();
            $('#loading').show();
                $.ajax({
            url: "ajax_php_file.php", 
            type: "POST",             
            data: new FormData(this), 
            contentType: false,       
            cache: false,             
            processData:false,        
            success: function(data)   
            {
            $('#loading').hide();
            $("#message").html(data);
            }
                });
              }
    });
};

}));

// Function to preview image after validation
$(function() {
$("#file").change(function() {
$("#message").empty(); // To remove the previous error message
var file = this.files[0];
var imagefile = file.type;
var match= ["image/jpeg","image/png","image/jpg"];
if(!((imagefile==match[0]) || (imagefile==match[1]) || (imagefile==match[2])))
{
$('#previewing').attr('src','no-preview.png');
$("#message").html("<p id='error'>Please Select A valid Image File</p>"+"<h4>Note</h4>"+"<span id='error_message'>Only jpeg, jpg and png Images type allowed</span>");
return false;
}
else
{
var reader = new FileReader();
reader.onload = imageIsLoaded;
reader.readAsDataURL(this.files[0]);
}
});
});
function imageIsLoaded(e) {
$("#file").css("color","green");
$('#image_preview').css("display", "block");
$('#previewing').attr('src', e.target.result);
$('#previewing').attr('width', '250px');
$('#previewing').attr('height', '230px');
};

});
4

2 回答 2

2

nude.scan 是异步的,因此您应该传递一个回调。就像是:

nude.scan(function (result) { /* your logic according to the result */ })
于 2015-10-03T14:35:43.277 回答
0

我找到了一个解决方案,问题出在 FormData 上,它返回: TypeError:FormData.constructor 的参数 1 没有实现接口 HTMLFormElement。这是由于某种原因没有出现在 chrome 控制台中,但它出现在 Firefox 中。所以我在 else 语句中添加了这行代码(以防找不到裸露):

var form = $('form').get(0); 

此代码返回一个 jQuery 对象($('form'))并将一个 HTML 元素传递给 FormData(get(0))。然后在ajax请求中:data: new FormData(form),
希望这个解决方案可以帮助其他人。

于 2015-10-05T18:59:32.480 回答