2016-08-29 2 views
2

모두입니다. 제목에 언급 된 오류를 반환하는 AJAX 호출이 있습니다. 나는 이것이 오류를 일으키는 선이라고 생각한다 : var obj = jQuery.parseJSON(data); 어쩌면 나는 잘못 만들어진 userData 일 것이다.예상치 못한 JSON 입력 끝 - 인식 할 수없는 SyntaxError

이 내 jQuery를 수 있습니다 :

var userData = 'email=' + email + '&password=' + password; 

$.ajax({ 
    type: 'POST', 
    url: './api/getInfo.php', 
    data: userData, 
    success: function(data){ 
     var obj = jQuery.parseJSON(data); 

     $('#name').html(obj.firstName + ' ' + obj.lastName); 
     ... 
    }, 
    error: function(){ 
     alert('ERROR'); 
    } 
}); 

그리고이 getInfo.php입니다 :

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    $email = prepareInput($_POST['email']); 
    $password = prepareInput($_POST['password']); 

    $stmt = $connection->conn->prepare('SELECT firstName,lastName,... FROM tb_users WHERE email = ? AND password = ?'); 
    $stmt->bind_param('ss',$email,$password); 

    $stmt->execute(); 

    $result = $stmt->get_result(); 

    $obj = $result->fetch_assoc(); 

    echo json_encode($obj); 
} 

내가 뭔가 잘못하고있어 경우에 누군가가 말해 줄래? PHP에서 전달

UPDATE

function prepareInput($data) 
{ 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 

    return $data; 
} 

데이터 $obj이 (내가 그들을 메아리하여이를 확인) 값을 포함 그래서 echo json_encode($obj); 문으로 문제가 될 수 있어야합니다 경우에도 비어 있습니다.

솔루션

나는 마침내 해답을 발견 - Link합니다. 인코딩 문제입니다. 일부 문자열이 UTF-8이 아니면 json_encode()은 빈 문자열을 반환하므로이 문자열을 UTF-8로 변환해야합니다.

+0

서버 응답을 확인하기 위해 성공 처리기의 첫 번째 행에'console.log (data)'를 추가하십시오. 마지막에 몇 가지 추가 코드가 있습니다/JSON 문자열 전에 오류가 발생합니다 ... – Philipp

+1

ajax 호출에서 "json"dataType 추가 : –

+1

문자열을 작성하는 대신 ajax'data' 개체를 사용해야합니다 너 혼자서. 이렇게 :'data : {email : email, password : password}'. – eisbehr

답변

3

당신이 언급 이후 : 성공 함수가 서버 응답이 비어있는 것 같다 데이터

을받지 않는, (A) 자격 증명이 잘못 또는 (b)가 결코 PHP에 오류가없고 코드 때문에 echo 행에 도달합니다.

PHP에서 오류 처리/확인을 추가하고 반환하기 전에 $ obj에 값이 있는지 확인하십시오.

try { 
    // ... sql code 

    if ($obj && is_array($obj)) { 
    echo json_encode($obj); 
    } else { 
    echo json_encode(array('error' => 'wrong username or password')); 
    } 
} catch (Exception $ex) { 
    echo json_encode(array('error' => $ex->getMessage())); 
} 

업데이트; SQL을 테스트하려면 SQL

디버깅을위한주의 사항 :

  1. 상태에서 첫 번째 줄 (방법 == POST)으로는 echo json_encode(array('resp'=>'test')); exit;을 추가하고 Ajax 코드를 실행합니다. console.log()에 {resp : test} JSON 객체가 표시됩니다. 이렇게하면 아약스 호출이 실제로 SQL로 파트에 도달한다는 것을 알 수 있습니다. 그래도 출력이 나오지 않으면 코드에 잘못된 것이 있습니다 ...

  2. 먼저 하드 코딩 된 SQL을 사용하십시오 : 결과를 알려주는 이메일/비밀번호를 입력하십시오. ->bind_param() 또는 $_POST 데이터를 사용하지 마십시오. 일반 SQL 문을 실행하고 AJAX가 값을 반환하는지 확인하십시오.

  3. 이제 Ajax가 작동하는 경우 하드 코드 된 SQL을 수정하여 정적 이메일/비밀번호 문자열을 bind_param()으로 옮깁니다. 여전히 $_POST 데이터를 사용하고 있지는 않지만 bind_param 메소드가 작동하는지 확인합니다. Ajax가 여전히 작동하는지 다시 확인하십시오.여전히 작동하는 경우

  4. , 다음 ->bind_param('ss', $_POST['email'], $_POST['password'])처럼 bind_param() 호출에 DIREKT $ _POST 데이터를 사용 -이 작동하는지, 을 당신이 prepareInput() 함수에 문제가 있음을 알고.

각 단계를 테스트 할 때 어떤 부분이 작동하지 않는지 신속하게 파악해야합니다.

+0

나는이 네 단계 각각을 테스트하고 모든 것이 잘 작동합니다. 배열'$ obj'는 값을 가지고 있습니다 (값을 반향하여 검사했습니다)하지만 어떻게 든 echo json_encode ($ obj);는 AJAX에 아무 것도 반환하지 않습니다. – PeMaCN

0

결과를 사용하기 전에 execute이 성공했는지 확인하지 않는 것 같습니다.

jsonParse 전에 내가 console.log(data)으로 시도 할 것입니다. 나는 당신이 놀람을 찾을 것이라고 생각한다.

또한 아파치 로그를 확인하십시오. 어쩌면 PHP가 경고를 던질 수도 있습니다.

+0

이미'console.log (data)'를 시도했지만 콘솔에 아무것도 쓰지 않았습니다. 또한 Apache 로그에는 오류나 경고가 없습니다. – PeMaCN

+0

SQL이 잘못된 것 같습니다. 어쩌면 당신의'prepareInput()'이 패스워드 나 이메일 주소를 수정하기 때문에 SQL은 결과를 반환하지 않을 것이다. – Philipp

관련 문제