2012-01-23 2 views
1

사용자는 액터 목록에서 액터를 클릭해야합니다. 기존 영화 제목이 제거 된 다음 선택한 배우와 관련된 영화 제목 만 표시됩니다.Json이 내 목록 상자에서 "정의되지 않은"값 가져 오기

내 "dvdtitle"목록 상자는 액터가 선택된 후 "정의되지 않음"목록을받습니다. 그러나 json_encode에서 응답 데이터를 확인하여 시각적으로 보려면 $('#actor').text(data)으로 입력하고 올바르게 입력하십시오.

[{"503":"Caught In The Crossfire"}, 
{"690":"Dead Man Running"}, 
{"1064":"Get Rich Or Die Trying"}, 
{"1145":"Gun"},{"1254":"Home of The Brave"}, 
{"2184":"Righteous Kill"}, 
{"2519":"Streets Of Blood"}, 
{"3273":"Twelve"}] 

내가 뭘 잘못하고 있는지 알 수 없습니다.

//getactors.php 
include("includes/connection.php"); 

$q = $_POST['input']; 
$final_array = array(); 

$resultActor = mysql_query("SELECT id, title, plot, catagory, release_date, rated FROM dvd WHERE actors LIKE '%".$q."%' "); 

while($rowActor = mysql_fetch_array($resultActor)) { 
    $final_array [] = array($rowActor['id'] => $rowActor['title']); 
} 

echo json_encode($final_array); 


// JavaScript Document 
$('#actorsname').click(function(){ 

    var actorValue = $('#actorsname option:selected').text(); 
    $.ajax({ 
     type: "POST", 
     url: 'getactors.php', 
     data: {input: actorValue}, 
     cache: false, 
     datatype: "json", 
     success: function(data) { 
      $('#dvdtitle option').each(function(i, option) { 
       $(option).remove(); // Empty DVD Listbox 
      }); 

      $('#actor').text(data); // to visualy check my json Data 

      $.each(data, function(i, j) { 
       var row = "<option value=\"" + i.value + "\">" + j.text + "</option>"; 
       $(row).appendTo("select#dvdtitle"); 
      }); 
     } 
    }); 
}); 
+4

귀하의 질의는 [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection)에 취약합니다. – paislee

+0

당신은 물체가 아닌 현재 요소의 색인 인 i의 'value'속성을 요구하고 있습니다. – Dalen

+0

@Dalen, 도움이 될만한 방법을 paislee에게 설명 할 준비를하십시오. – mowwwalker

답변

-2

data은 개체의 배열입니다. i의 값은 개체의 인덱스이고 j이 개체입니다. 여기

: http://api.jquery.com/jQuery.each/

+1

어떻게 도움이됩니까? – paislee

+0

@paislee, 나는 처음에 그에게 문제를 말했고 그래서 그는 스스로 해결할 수 있었다. 나는 그가해야 할 일에 대한 나의 대답을 업데이트했다. – mowwwalker

+0

첫 번째 문장은 문제가 없음을 의미합니다. – paislee

4

문제는 당신의 아약스가 같은 영화의 ID로 하나의 키/값 쌍을 포함하는 객체를 반환한다는 것입니다 :

$.each(x, function(i, j){ 
    $.each(j, function(k, v){ 
     var row = "<option value=\"" + k + "\">" +v+ "</option>";     
     $(row).appendTo("select#dvdtitle"); 
    }); 
    }); 

당신은 자세한 내용은 JQuery와 설명서를 볼 수 있습니다 키와 영화 제목을 값으로 사용합니다. 이렇게하면 찾을 ID 번호를 each 루프로 알지 못하기 때문에 데이터 검색이 더 어려워집니다.

이상적으로, 당신은 당신의 JSON이 방법 대신 포맷 한 것 : 당신은 JSON은 "제목을"ID "를 사용하고 있기 때문에 j.idj.title를 사용하여 each 루프에서 데이터를 검색 할 수 있도록 할

[ 
    {"id":503,"title":"Caught In The Crossfire"}, 
    {"id":690,"title":"Dead Man Running"} 
] 

"키로. 그러나 그렇게 구성되지 않았기 때문에 객체의 각 키/값 쌍을 반복해야합니다.

$final_array[] = array(
    'id' => $rowActor['id'], 
    'title' => $rowActor['title'] 
); 

을 그리고 j.idj.title (예를 들어, VAR 행 = "<option value=\"" + j.id + "\">" + j.title + "</option>";)를 사용 :

이상적으로, 당신이 당신의 PHP를 변경하려는 것입니다.

다음은 PHP 코드를 수정하지 않고 작성한 예입니다. 위 예제는 위 예제를 기반으로 작성되었습니다. data 변수는 Ajax 요청에서받은 것입니다.

// This is the data retrieved using Ajax. 
var data = [{"503":"Caught In The Crossfire"},{"690":"Dead Man Running"},{"1064":"Get Rich Or Die Trying"},{"1145":"Gun"},{"1254":"Home of The Brave"},{"2184":"Righteous Kill"},{"2519":"Streets Of Blood"},{"3273":"Twelve"}]; 

// Loop through each object in the data array. 
$.each(data, function(key, movie) 
     { 
      // Because the ID is a key and the title a value, we can't determine the ID/title unless we loop through each one of the key/value pairs in the object. Each movie only has one key/value pair so this won't be a problem. 
      $.each(movie, function(id, title) 
        { 
         $('<option />').attr('value', id).text(title).appendTo('select#dvdtitle') 
        }); 
     }); 

jsFiddle : http://jsfiddle.net/j7HGr/

나는 그 말이 바랍니다.

추신 : $q=$_POST['input'];mysql_real_escape_string으로 변경하여 SQL 삽입을 방지 할 수도 있습니다.

+0

이봐, 내 대답에 엉망이 된 것 같은 명백한 것이 있니? 당신이 말한 자바 스크립트 부분을 전하려고했는데 어느 시점에서 당황한 것처럼 보입니다. – mowwwalker

+0

@Walkerneo, 네가 맞았 어. 아마도 JSON을 변경하는 것이 더 좋은 방법 일 수 있다고 생각하거나 위에서 설명한 것과 같은 설명을 놓쳤을 것입니다. –

+0

나는 그것이 내가 추측하는 것을 명심해야 할 것이다. – mowwwalker

관련 문제