2017-02-22 6 views
0

У меня есть объект item.movieimage, содержащий некоторые тексты (item:Object), которые извлекаются из моей базы данных. Текст меняется каждую неделю автоматически.Доступ к элементам в массиве - AS3

Если я trace(item.movieimage)output что-то вроде этого:

text1 
text2 
text3 
text4 

Слова изменения как код принимает их из моей базы данных. База данных меняет слова каждую неделю.

Теперь, я хочу, чтобы мой код AS3 отображал третий элемент item.movieimage.

Я пытался сделать это:

var my_str:String = item.movieimage+","; 
var ary:Array = my_str.split(","); 
    trace(ary[2]); 

Но это не работает. Выход «undefined».

Знаете ли вы, как я могу получить доступ к определенному элементу в массиве, который я создал? Или как я могу получить доступ к третьему элементу item.movieimage?

Если я trace(ary);, выход:

text1, 
text2, 
text3, 
text4, 

EDIT:

Для Infos: trace(typeof(item.movieimage)) и trace(typeof(ary)) являются:

typeof(item.movieimage)=string 
typeof(ary)=object 

EDIT 2:

Вот захват экрана item.movieimage

Screen Cap of item.movieimage

EDIT 3

Вот мой код, чтобы понять, как "item.movieimage" работает

//Variables for downloading content from my database to my AS3 code 

var urlReqSearchAll: URLRequest = new URLRequest("http://www.myWebSite/searchMovie4.php"); 
    var loader5:URLLoader = new URLLoader(); 


//downloading content 

     function searchAll():void { 
      if (contains(list)){ 
       list.removeChildren(); 
      } 
      urlReqSearchAll.method = URLRequestMethod.POST; 
       loader5.load(urlReqSearchAll); 
       loader5.addEventListener(Event.COMPLETE,complete); 

      var variables:URLVariables = new URLVariables();  
} 

//Content Downloaded. 

     function complete(e:Event):void { 

    addChild(list); 
    products = JSON.parse(loader5.data) as Array; 
hourSaved.data.saved=loader5.data; 
    products.reverse(); 
    for(var i:int = 0; i < products.length; i++){ 
     createListItem(i, products[i]); 
} 
    displayPage(0); 
    showList(); 
} 


// If too much items --> creates multiple page 

const itemsPerPage:uint = 7; 
var currentPageIndex:int = 0; 

function displayPage(pageIndex:int):void { 
    list.removeChildren(); 
    currentPageIndex = pageIndex; 
    var firstItemIndex:int = pageIndex * itemsPerPage; 
    var j:int = 0; 
    var lastItemIndex: int = firstItemIndex + 7; // as lastItemIndex should be 10 more 
if (lastItemIndex > products.length) // if lastindex is greater than products length 
lastItemIndex = products.length; 
for(var i:int = firstItemIndex; i< lastItemIndex; i++){ 
createListItem(j, products[i]); // j control the position and i points to particular element of array.. 
j++; 
} 
    next.visible = lastItemIndex < products.length - 1; 
     if(currentPageIndex==0){ 
     previous.visible=false; 
    } 
} 


// Display the information downloded from my database 

function createListItem(index:int, item:Object):void { 

var listItem:TextField = new TextField(); 
    var myFormat:TextFormat = new TextFormat(); 
    myFormat.size = item.title.length > 13 ? 22 : 26 
    listItem.multiline = true; 
    listItem.wordWrap = true; 
    myFormat.align = TextFormatAlign.CENTER; 
    myFormat.color = 0xA2947C; 
    myFormat.font = "Ebrima"; 
    myFormat.bold = true; 
    listItem.defaultTextFormat = myFormat; 
    listItem.x = 135; 
    listItem.y = 123+ index * 84; 
    listItem.width = 200; 
    listItem.height = 80; 
listItem.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void { 
     showDetails(item); 
    }); 
    list.addChild(listItem); 
    str = item.title; 


} 

Мой PHP файл "SearchMovie4.php" заключается в следующем:

$products = array(); 


while ($row = mysql_fetch_array($sql_result)) { 
    $products[] = array(
"title" => $row["theTitle"], 
"movieimage" => $row["movieimage"], 
"movielength" => $row["movielength"], 
"story" => $row["story"], 
    ); 
} 
echo json_encode($products); 

Итак, если я сделаю trace(item.movieimage) в коде AS3, он отобразит все элементы в строке movieimage моей базы данных.

Если я сделаю trace(item.title) в коде AS3, он отобразит все элементы в заголовке строки моей базы данных.

Что бы я хотел, это сделать в моем коде AS3, trace(item.movieimage[2]), чтобы показать мне третий элемент в строке «movieimage».

+0

Возможно, вы забыли приложить значение для свойства внутри кавычек! Измените его на: «один, три, шестнадцать, четырнадцать»; «или вы, возможно, намеревались иначе, и в этом случае, пожалуйста, уточните :) – someOne

+0

Вы правы, мой оригинальный пост был не ясен. Я отредактировал свой пост и надеюсь, что я это разъяснил. – Steph

+0

Показать следы для typeof (item.movieimage), typeof (ary), ary.length – Organis

ответ

0

Ну, текст вы предоставили в movieimage свойство item объекта имеет не то же самое delimiter как то, что вы предоставили методу split(); в вашем случае символ запятой!


Я подозреваю, разделитель у вас есть, это «пространство» характер или new-line характер, как характер carriage retrun.
В следующем фрагменте кода, я использовал «пространство» в качестве разделителя символ:

var item:Object = new Object(); 
item.movieimage = "text1 text2 text3 text4"; 
var my_str:String = item.movieimage; 
var ary:Array = my_str.split(" "); 
trace(ary[2]); // text3 
+0

Thx для ответа но, нет, 'item.movieimage' не может быть' = 'to' "text1 text2 text3 text4" '; В качестве примера я печатаю '' text1, text2 text3 text4 "'. 'item.movieimage = некоторые тексты'. Он извлекает информацию из моей базы данных. – Steph

+0

Это строка «String» в конце процесса извлечения базы данных! Вам просто нужно определить символ разделителя, вот и все! – someOne

+0

Я попытался добавить разделитель с помощью 'var my_str: String = item.movieimage +", ";' поскольку я не знаю, что такое разделитель. Я редактировал свой оригинальный пост с захватом экрана. Может быть, вы увидите, что такое разделитель ...? (для информации, я пробовал также с «/ n», но не успел ..) – Steph

0

Как @someOne сказал вывод показывает элементы списка, каждый на новой строке, так что вам нужно до split() против новых строк. Один из них должен работать:

// if server uses "\n" newline char 
var movies:Array = item.movieimage.split("\n"); 

// if server uses "\r" carriage return char 
var movies:Array = item.movieimage.split("\r"); 

// if you aren't sure or there's a mixture of newline chars 
var movies:Array = item.movieimage.split(/[\r|\n]+/); 

отметить также, что если у вас есть какой-либо контроль над тем, как сервер возвращает эти значения, вы должны просто возвращать массив JSON (так как я вижу в вашем скриншоте вы уже декодирования JSON), то вам не придется делать ни одного разделения строк.

+0

THX вы для вашего ответа.Не могли бы вы объяснить мне, как я могу вернуть массив JSON, пожалуйста? Действительно, я расшифровываю JSON в этой строке: 'products = JSON.parse (loader5.data) как Array;' – Steph

+0

Я пробовал все строки, которые вы мне рассказывали. Не выдает ошибку, но все равно возвращает «undefined», когда я делаю «trace (movies [2]);» (для того, чтобы иметь третий элемент в массиве). – Steph

+0

Я пробовал: \t 'var myArray: Array; \t var myObject: Object; \t myObject = item.movieimage; \t myArray.push (myObject); 'но ошибка: Ошибка # 1009: не удается получить доступ к свойству или методу ссылки на нулевой объект – Steph

Смежные вопросы