2016-08-10 3 views
0

"AjaxChat 창에"이미지 업로드 "기능을 추가하려고합니다. 서버로 업로드하는 것이 효과적이지만 업로드 된 파일의 tmp_name/위치를 반환 할 수 있어야합니다. 내 자바 스크립트에서 나는 다음과 같은 (주) 코드 (일부 설치 코드가 필요하기 때문에 생략되었습니다 - 업로드가 예상대로 작동)이 있습니다XMLHttpRequest에서 호출 된 PHP에서 Javascript로 값을 되 돌림

// Set up request 
var xhr = new XMLHttpRequest(); 

// Open connection 
xhr.open('POST', 'sites/all/modules/ajaxchat/upload.php', true); 

// Set up handler for when request finishes 
xhr.onload = function() { 
    if (xhr.status === 200) { 
     //File(s) uploaded 
     uploadButton.innerHTML = 'Upload'; 
    } else { 
     alert('An error occurred!'); 
    } 
}; 

// Send data 
xhr.send(formData); 

내 PHP 코드를 ("upload.php로는")는 다음과 같이이다 다음과 같습니다 :

<?php 
$valid_file = true; 
echo '<script type="text/javascript">alert("PHP Code Reached");</script>'; 
if($_FILES['photo']['name']) { 
    //if no errors... 
    if(!$_FILES['photo']['error']) { 
     //now is the time to modify the future file name and validate the file 
     $new_file_name = strtolower($_FILES['photo']['tmp_name']); //rename file 
     if($_FILES['photo']['size'] > (1024000)) { //can't be larger than 1 MB 
      $valid_file = false; 
      $message = 'Oops! Your file\'s size is to large.'; 
      exit("$message"); 
     } 

     //if the file has passed the test 
     if($valid_file) { 
      //move it to where we want it to be 
      move_uploaded_file($_FILES['photo']['tmp_name'], '/var/www/html/images'.$new_file_name); 
      $message = 'Congratulations! Your file was accepted.'; 
      exit("$message"); 
     } 
    } 
    //if there is an error... 
    else { 
     //set that to be the returned message 
     $message = 'Ooops! Your upload triggered the following error: '.$_FILES['photo']['error']; 
     exit("$message"); 
    } 
} 
?> 

이미지가 서버에 업로드되기 때문에 PHP 코드가 실행 중임을 알릴 수 있습니다. 그러나, 나는 다음과 같은 코드를 사용하여 PHP 내에서 자바 스크립트 "경고"팝업을 생성 할 수 있음을 읽어

echo '<script type="text/javascript">alert("PHP Code Reached");</script>';

그러나 위의 라인은 아무것도하지 않는 것. 이것은 PHP를 직접 실행하지 않고 XMLHttpRequest를 사용하기 때문에 예상됩니까?

궁극적으로 내 목표는 이미지 URL을 만들고 img 태그에 넣고 ajaxChat.insertText를 사용하여 채팅 창으로 보낼 수 있도록 PHP를 호출 한 자바 스크립트로 업로드 된 파일의 이름을 다시 전달하는 것입니다.() 및 ajaxChat.sendMessage(). 비록 이것이 가능한지 PHP로 실행하고 있는지는 확실하지 않습니다. 어떻게하면이 일을 할 수 있습니까?

+0

'echo'는 AJAX가 아닌 일반적인 양식 제출에만 적용됩니다. AJAX를 사용하면 스크립트의 출력은'xhr.responseText'에 있고'xhr.onload' 함수는 원하는대로 할 수 있습니다. – Barmar

답변

2

XMLHttpRequest을 사용하면 서버 스크립트의 출력은 개체의 responseText에 있습니다. 그래서 당신은 할 수 있습니다 :

xhr.onload = function() { 
    if (xhr.status === 200) { 
     //File(s) uploaded 
     uploadButton.innerHTML = xhr.responseText; 
    } else { 
     alert('An error occurred!'); 
    } 
}; 

당신이 이러한 정보 메시지와 파일의 이름과 같은 정보를 여러 조각을 다시 보내려면, 당신은 자바 스크립트 될 것이다, 연관 배열을 인코딩하는 JSON을 사용할 수 있습니다 그것을 파싱 할 때 객체.

+0

그래서 업로드 만 성공하면 파일 이름 만 반환한다고 가정 해 봅시다. 자바 스크립트에서 변수를 만들 수 있습니다 : var returnedFileName = xhr.responseText; 그리고 PHP에서는 모든 exit ("$ message ");'하나를 제외한 호출 (성공적인 업로드의 경우) :'$ message = $ new_file_name; exit ("$ message");'Javascript를 사용하여 PHP에서 반환 값을 검색하는 것이 효과가 있습니까? 그런 다음 반환 된 메시지의 형식을 검사하여 올바른 파일 이름 (오류 메시지가 아니거나 비어 있지 않음)인지 확인하십시오. 나는 단지 내가 정확하게 이해하고 있는지 확인하고 싶다. – DerStrom8

+0

예, 올바르게 이해하고 있습니다. 스크립트에 의해 에코 된 모든 것은'xhr.responseText'에 있습니다. – Barmar

+0

그냥 테스트 해보니 아름답게 작동합니다! 매우 감사합니다! – DerStrom8

관련 문제