회원 가입 화면에서 버튼 클릭시 함수를 만들었는데, 함수 선언 위치때문인지 undefined 되어있다고 오류가 발생합니다.

회원 가입 화면에서 버튼 클릭시 함수를 만들었는데, 함수 선언 위치때문인지 undefined 되어있다고 오류가 발생합니다.

QA

회원 가입 화면에서 버튼 클릭시 함수를 만들었는데, 함수 선언 위치때문인지 undefined 되어있다고 오류가 발생합니다.

답변 2

본문

<div class="btn_conf">

        <input type="button" value="인증" onclick="authen()">

    </div>

 

이렇게 버튼을 만들고, authen 함수를 만들었는데,, 

 

Uncaught ReferenceError: authen is not defined 

 

이런 에러가 발생합니다.

 

일단 파일은 register_form.skin.php 입니다. 

 

그리고 함수 선언한 부분의 코드는 다음과 같습니다.

 

function authen(){

    <?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt ($ch, CURLOPT_URL, "http://sugang.skku.edu/skku/login?attribute=loginChk&lang=KO&id=2013313541&pwd=dudrhkdud25");

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HTTPGET, true);

 

$contents = curl_exec($ch);

curl_close($ch);

 

$da = $data['code'];

?>

    }

이 질문에 댓글 쓰기 :

답변 2

onclick 시에 호출하는 함수는 js고, 실제 js 함수에 선언되어 있는 코드는 php네요.

authen() 함수를 실행했을 때 $.ajax()를 사용해서 php 코드를 사용해서 결과값을 받아오는 방식으로 하셔야 할 것 같네요.

아니면 새 창을 띄우시거나 iframe을 이용하셔도 되구요. 

cURL로 받아온 값은 $contents에 넣었는데 느닷없이 $data['code'] 를 부르는군요. 왠지 받아온 $contents를 파싱해서 $data에 넣어줬어야 했을것만 같군요.

여튼 그러고는 끝나버려서 authen() 함수 자체는 아무 동작하지 않는 상태가 될겁니다.

자바스크립트 입장에서는 오류도 없이 끝났는데 선언이 안되있다고 나온다면 저 함수가 선언된 곳이 php파일이 아닌 .js 여서 php문법을 이해하지 못해서 에러가 난 경우일 수 있겠구요, 아니면 저 함수가 선언된 파일을 로딩 자체를 안했을 수도 있겠네요.

자바스크립트 소스를 저 버튼이 있는 페이지에 직접 넣어보세요.

그러고나서 클릭했을때 아무일도 안일어나고 에러도 안난다면 그 다음에 하려던 뭔가를 처리해줘야겠죠.

아마도 authen()함수에서 누락된 부분은 cURL로 받아온 값이 json이므로 파싱하고 code가 200이면 토큰을 자바스크립상에서 특정변수나 input의 value로 넣어주는 작업이겠죠.

token 이라는 이름을 가진 input이 있고 거기에 가져온 값을 넣어준다고 전제한다면 $da = $data['code']; 부분을 이렇게 바꾸면 되지 않을까 싶습니다.


$data = json_decode($contents);
$da = $data['code'];
if ($da=='200')
	echo '
		var token = "'.$data['token'].'";
		if (token) $("input[name=token]").attr("value",token);
	';
else
	echo 'alert("토큰가져오기 실패");';

물론 정답은 아닙니다. 저 토큰을 갖고 뭘 어떻게 하려는 의도였는지는 알 수가 없으니.. 나머지는 본인의 의도의 맞게 추가하거나 처리하셔야겠죠.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 125,873
© SIRSOFT
현재 페이지 제일 처음으로