2

我用ajax和jquery编写了在本地机器上上传图像的代码。如果条件没有被执行。

这是 fnUploadImage 脚本。

function fnUploadPhoto()
{
var image = $("#txtUploadImage").val();

var objUploadImage = new Object();
objUploadImage.ImageName = image;
objUploadImage.UserID = <?php echo $_SESSION['UserId']; ?>

$.ajax({
    type:"POST",
    url:"db.php?UploadImage",
    data: {data:objUploadImage},
    dataType:"json",
    async:false,
    success: function(response)
    {
        alert(response.ErrorMessage);
        if(response.IsError)
            $("#errorUploadPhoto")[0].innerHTML = response.ErrorMessage;
        else
            $("#errorUploadPhoto")[0].innerHTML = response.SuccessMessage;
    },
    error:function(response)
    {
        alert("Error: " + response.ErrorMessage);
    }
});
}

该函数调用db.php UploadImage函数如下:

function UploadImage($data)
{
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["txtUploadImage"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& in_array($extension, $allowedExts))
    {
        if ($_FILES["file"]["error"] > 0)
        {
            die(json_encode(array("IsError" => true, "ErrorMessage" => "Error")));
            //echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
            json_encode(array("IsError" => true, "ErrorMessage" => "Return Code: " . $_FILES["file"]["error"]));
        }
        else
        {
            if (file_exists("profile_images/" . $_FILES["file"]["txtUploadImage"]))
            {
                //echo $_FILES["file"]["name"] . " already exists. ";
                json_encode(array("IsError" => true, "ErrorMessage" => "Filename already exists."));
            }
            else
            {
                if($_FILES["file"]["size"]/1024 < 20)
                {
                    move_uploaded_file($_FILES["file"]["tmp_name"], "profile_images/" . $_FILES["file"]["txtUploadImage"]);
                    //echo "Stored in: " . "profile_images/" . $_FILES["file"]["name"];
                    json_encode(array("IsError" => false, "SuccessMessage" => "Image uploaded successfully."));
                }
                else
                {
                    json_encode(array("IsError" => true, "ErrorMessage" => "Minimum image size is 20 kb."));
                }
            }
        }
    }
else
{
    //echo "Invalid file.";
    json_encode(array("IsError" => true, "ErrorMessage" => "Invalid file."));
}
}

当我运行此脚本时,它会在我身上显示名为 undefined 的错误。请帮我解决这个问题。

4

4 回答 4

0

检查您是否在$_FILES["file"]数组中获取文件

于 2013-09-11T09:05:41.980 回答
0

引号在这里。如果您不使用代码,它会理解它是一个未定义的变量

于 2013-09-11T07:32:05.857 回答
0

当请求出现问题时error调用 on 函数。$.ajax但是,您正在使用脚本运行成功的预期结果,但返回错误:

error: function(response) {
    alert("Error: " + response.ErrorMessage);
}

response.ErrorMessage不会设置(仅在success回调中),因为这是您在请求成功时返回的内容,尽管请求中的逻辑可能会返回错误,但这是您在success回调中处理的问题。

这是捕捉错误呼叫的方法

error: function(xhr, status, error) {
    alert("Error: " + status + ' ' + error);
}

如评论中所述,这条线也有问题:

objUploadImage.UserID = <?php echo $_SESSION['UserId']; ?>;
                                                needs a ; ^

如果UserId不是整数 ID,则需要引号。

于 2013-09-11T07:32:44.047 回答
0

我认为它是自 1.5 版以来已从 jQuery 中删除的 jquery 的旧方法“handleError”,您可以在 javascript 中使用此自定义错误处理程序,任何地方都是 jQuery:

jQuery.extend({
handleError: function( s, xhr, status, e ) {
    // If a local callback was specified, fire it
    if ( s.error )
        s.error( xhr, status, e );
    //Log it in the console
    else if(xhr.responseText)
        console.log(xhr.responseText);
}});
于 2013-09-11T09:08:43.377 回答