Jquery 和 Ajax 中的错误

Error in Jquery and Ajax

本文关键字:错误 Ajax Jquery      更新时间:2023-09-26

我用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的错误。请帮我解决这个问题。

号在这里更响亮。如果你不使用代码,它就会理解它是一个未定义的变量

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

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,则它确实需要引号。

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

我认为这是

jquery的旧方法"handleError",它已从jQuery版本1.5中删除,您可以在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);
}});