1

AJAX を使用して、画像ファイルを非同期的にサーバーにアップロードしようとしています。ファイルは FIREFOX 経由では正常にアップロードされますが、Google Chrome 経由ではアップロードされません。

次のエラー メッセージが表示されます。 Uncaught SyntaxError、予期しない入力の終わり

グーグルで検索すると、ブラケットが1つまたは2つ欠落している可能性がありましたが、コードにそのようなエラーは見つかりませんでした。ヘルプ?

コードは次のとおりです。

<input type="file" name="profile_image" onchange="uploadedImage(this)"/>

function uploadedImage(image)
{
  var file = image.files[0];
  var name = file.name;
  var size = file.size;
  var type = file.type;
  var msg='';
  if(size>500000)
      msg+="File should not be greater than 500kb";
  if(type!="image/jpeg")
      msg+="Only JPEG images are currently supported";
  if(msg!='')
  {
     alert(msg);
     return;
  }   
var formData = new FormData(document.getElementById('edit_settings'));
$.ajax(
  {
    url: 'upload_demo_image.php',  //Server script to process data
    type: 'POST',
    xhr: function()
    {  // Custom XMLHttpRequest
        var myXhr = $.ajaxSettings.xhr();
        return myXhr;
    },
      // Form data
    data: formData,
    //Options to tell jQuery not to process data or worry about content-type.
    cache: false,
    contentType: false,
    processData: false,
    success: function(filename)
    {
       var response = jQuery.parseJSON(filename);
       var newImage=response['filename'][0];
       $("#edit_profile_image_container").html("<img id='edit_profile_image' src='"+newImage+"' alt='Profile Image'/>");
        crop();
    }
 }
 );

}

サーバーから返された JSON データは次のとおりです。

{"filename":["uploadDemo\/8_demo.jpg"]}

PHP コード:

<?php session_start();
require_once 'myfunctions.php';
if(isset($_FILES["profile_image"]["name"]))
{
$query="SELECT * FROM students WHERE email='$_SESSION[user]'";
$result=queryMysql($query);
$row=mysql_fetch_array($result);
$_FILES["profile_image"]["name"]=$row['studentid']."_demo.jpg";
$saveto="uploadDemo/$row[studentid]_demo.jpg";
$tempname=$_FILES["profile_image"]["tmp_name"];
$type=$_FILES["profile_image"]["type"];
$image_check=uploadimage($tempname,$saveto,$type,600);
$filename["filename"][]=$saveto;
header('Content-type :text/JSON');
echo json_encode($filename);
}
?>
4

2 に答える 2

0

formData オブジェクトを次のように変更する必要があります。

var formData = new FormData();
formData.append("profile_image",filename);

また、カスタム xhr 関数は必要ありません。

上記の変更により、すべてが Chrome で機能します。

于 2013-09-04T11:52:23.367 に答える