2014-09-17 1 views
0

SQL 쿼리를 실행하는 PHP 스크립트에서 데이터를 가져 오기 위해 데모를 만들고 관련 배열과 json_encodes를 가져 와서 호출하는 PHP 파일에서 JQuery ajax 호출자. 웬일인지 도착하지 않습니다 (파이어 버그 확인). 하지만 수동으로 2D 배열을 만들면 json_encode로 잘 동작합니다. 나는 왜 내 배열이 SQL에서 그것을 만들지 못하게 완전히 엉망진창이다. 결과 문자열을 diffed하고 그들은 정확히 동일합니다.PHP와 JQuery - PHP json_encoded 2D 배열이 JQuery Ajax에 도착하지 않는다

코드 :

...snip... 
$.ajax({ 
     type: "GET", 
     url: "getclients.php", 
     data: { username: $('#staff_list').val() }, 
     //contentType: "application/json", 
     dataType: 'json', 
     success: function(results) { 
      console.log("results"); 
     }, 
     fail: function() { 
      console.log("fail!!"); 
     }, 
     error: function(r, e, m) { 
      console.log("error"); 
      //console.dir(r); 
      console.log(e + ', ' + m); 
     } 
    }) 
    .done(function(data) { 
     console.log("done"); 
     //console.log(data); 
    }); 
    console.log("done with change detection...");  
...snip... 

PHP 파일이에 어떤 도움을 주시면 감사하겠습니다

<?php 
header('Content-Type: application/json'); 
error_reporting(0); // prevents a notice from breaking ajax 
//session_start(); 
$username = $_GET['username']; 
$json = array(); 
$test = array(
    array("id"=>4,"first_name"=>"Miles","last_name"=>"O'Brian"), 
    array("id"=>5,"first_name"=>"Jean Luc","last_name"=>"Picard"), 
    array("id"=>6,"first_name"=>"Reginald","last_name"=>"Barclay") 
     ); 

$mysqli = new mysqli('mydomain', 'myuser', 'mypassword', 'mydb'); 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 
if ($stmt = $mysqli->prepare("SELECT `id`, `first_name`, `last_name` FROM client WHERE provider_username = ?")) { 
    $stmt->bind_param('s', $username); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 


    while ($row = $result->fetch_assoc()) { 
     $json[] = $row; 
    } 

    $result->close(); 
} 

$mysqli->close(); 
echo json_encode($json); 
echo json_encode($test);// this works 
?>  

. 나는 PHP에 익숙하지 만 프로그래밍에는 신경을 쓰지 않아서 (매뉴얼과 구글을 포함하여) 내가 생각할 수있는 모든 것을 시도했고 완전히 완전히 엉망진창이었다.

+0

오류보고를 켜야합니까? 확인해 볼까? 'console.log ('results')'대신'console.log (results)'대신에 응답을 넣는다. – Ghost

+0

정확한 사용자 이름이있는 사용자가 있습니까? "like"를 의미하는 것처럼 보이는 "sql"에서 "="을 사용하고 있습니다 –

+0

다음은 SQL에서 json_encode 된 결과 데이터 세트의 정확한 사본입니다 : [{ ""id ": 7,"first_name ":"Tom – seang

답변

1

문제점을 파악했습니다. 데이터를 설정 한 Ajax 라인 :

data: { username: $('#staff_list').val() } 

이 문제의 원인입니다. 어떤 이유로 배열을 가져 와서 줄을 만듭니다.

data: { username: $('#staff_list').val()[0] } 

은이 문제를 수정합니다.

+0

기억하십시오 : 모든 jQuery DOM 선택기 함수'$ (something)'은 배열을 반환합니다; '$ ('# staff_list'). first(). val()'은 당신이 원했던 것입니다. –

+0

잘 알고 있습니다. 고맙습니다. – seang

0

여기에 결과 세트를 게시 할 수 있습니까?
$ result-> fetch_assoc().

귀하의 PHP 버전을 확인하십시오. "$ json [] = $ row;"코드에서 사용한 것처럼 shorten 메서드를 사용하여 배열 요소를 추가하기 때문에 PHP 5.4에서 사용할 수 있습니다. 자세한 내용은 document을 참조하십시오.

두 번째 옵션은 PHP 버전에서 사용할 수없는 경우 다음과 같이 구현할 수 있습니다. array_push ($ json, $ row); 대신에 $ json [] = $ row;

+0

다음은 해당 배열의 print_r'ed 출력입니다. Array ("", " [0] => 배열 ( [ID] => 7 [FIRST_NAME] => 톰 [LAST_NAME] => 크루즈 ) [1] => 배열 ( [ID] => 8 [first_name] => John [last_name] => Cusak ) ) – seang