Զանգվածի փոխանցում Javascript-ից php ajax-ին: Փոփոխական Լավագույն միջոց՝ զանգված փոխանցելու PHP-ի և Javascript-ի միջև

Ես ունեմ ֆայլ php ընդլայնմամբ: Այստեղ ես կարդացել եմ տվյալների բազայից ստացված տեղեկատվությունը։ Եվ ես պետք է փոխանցեմ այս տվյալները (կապված զանգված) js-ին, որը նույնպես ներառված է այս php ֆայլում:

"; var_dump ($arr); echo ""; ) // բեռնել տվյալները տվյալների բազայից $query = R::getAll("SELECT * հարցերից"); var_dump1 ($query); ?>

array(5) ( => array(7) ( ["id"]=> string(1) "1"["question"]=> string(143) "Աղյուսակի ______________ օգտագործվում է ձևավորումը փոփոխելու համար. աղյուսակ, ինչպես դաշտի անվանումը փոխելը կամ դաշտի տվյալների տեսակը փոխելը։"["answer1"]=> string(14) "Datasheet View"["answer2"]=> string(11) "Desisn View" ["answer3"]=> string(10) "Sable View"["answer4"]=> string(11) "Wizard View"["true_answer"]=> string(1) "1") => array(7 ) ( ["id"]=> string(1) "2"["question"]=> string(83) "Դիզայնի տեսքով կարող եք ընտրել աղյուսակի մի քանի դաշտեր՝ օգտագործելով ________ ստեղնը։"["answer1" ]=> string(3) "Alt"["answer2"]=> string(8) "Spacebar"["answer3"]=> string(5) "Shift"["answer4"]=> string(4) " Ctrl"["true_answer"]=> string(1) "3") ... Uncaught SyntaxError. բացակայում է) փաստարկների ցանկից հետո

Եզրակացություն:
Այսպիսով php կողմըԱմեն ինչ լավ է. Բայց երբ մենք փորձում ենք վերլուծել այս զանգվածը js մասի js օբյեկտի մեջ, տեսնում ենք տարօրինակ սխալ։

  1. Ինչպես բեռնել տվյալները (ինչպես իմ դեպքում կապված զանգվածը) php-ից js: Երբ php-ը և js-ը գտնվում են նույն ընդլայնման (php) ֆայլում:
    1. Ինչպես բեռնել տվյալները (ինչպես իմ դեպքում կապված զանգվածը) php-ից js: Երբ php-ը և js-ը միացված են տարբեր ֆայլեր. Օրինակ, մենք ունենք 1 ֆայլ php ընդարձակումներ, որում մենք իրականացրել ենք տրամաբանությունը (իմ դեպքում դա DB է)։ Եվ մենք պետք է այս տվյալները ներմուծենք js ընդլայնման ֆայլ:

Լուծում

1) Այն ամենը, ինչ դուք պետք է անեք, հետևյալն է.

JSON = JavaScript Object Notation... այն արդեն ձևաչափով է, որը կարող է վերագրվել փոփոխականին՝ Javascript-ում օգտագործելու համար:

Մինչդեռ այն «const»-ին վերագրելը, հավանաբար, լավ գաղափար չէ, քանի որ այն օբյեկտ է, բայց ես հենց այնպես եմ կարդում դրանք, և դա դեռ հիանալի է. Լրացուցիչ տեղեկություններ:

2) Եթե դուք կանչում եք php ֆայլ js-ից (ala ajax), ապա կարող եք վերադարձնել չմշակված JSON php վերադարձից, և կախված նրանից, թե ԻՆՉՊԵՍ եք կատարել ձեր ajax զանգը (և որ գրադարանով, օրինակ, գուցե jquery-ով) ... կարող եք կամ գուցե կարիք չունենա անել JSON.parse(returnData): Բավարար տեղեկատվություն չկա այն մասին, թե ինչպես եք ուզում դա անել՝ հստակ պատասխան տալու համար:

Այլ լուծումներ

Դուք պետք է սովորեք JSON-ի մասին:
Սա շարահյուսություն է, որը կարող է վերլուծվել ցանկացած լեզվով, ներառյալ JS-ը:

պարզապես փոխանցեք ձեր զանգվածը PHP-ից ձեր JacaScript կոդին այսպես.

Սովորաբար ձեր php կոդը կարտացոլվի html էջում: Այս էջում դուք կարող եք տվյալների կառուցվածքը ըստ ձեր կարիքների: Օրինակներ (ձեր php կոդում).

// որպես js - փոփոխական.

հարցերը կլինեն գլոբալ JS փոփոխական, որին կարող եք հասնել
մեկ այլ js.file-ից կամ html ֆայլում ներկառուցված js-ից:

// Որպես տվյալներ ձեր html-ում. // Then fetch this data using js-code, eg in a different js-file: alert(document.getElementById("id_questions").value()); !}

Սա կարելի է ձեռք բերել նաև արտաքին js ֆայլից կամ js-ից, որը ներկառուցված է ձեր php կոդից html թողարկման մեջ:

AJAX և jQuery: Պարամետրերի փոխանցում PHP-ից JavaScript-ին: Օգտագործելով JSON
(փոփոխվում է 12/10/2012)

Նրանք, ովքեր ծրագրավորում են AJAX հավելվածները, հաճախ բախվում են PHP-ից կամ ծրագրավորման այլ լեզվից պարամետրեր JavaScript-ին փոխանցելու հետ կապված խնդիրներին: Սովորաբար, սա տվյալների փոխանցում է տվյալների բազայից, որին հասանելի է միայն սերվերի սկրիպտը: Ինչպե՞ս կարող եմ դրանք ցուցադրել հաճախորդի համակարգչում՝ առանց էջը վերաբեռնելու: Ահա թե ինչի մասին է այս հոդվածը:

Մի քանի խոսք JSON-ի (JavaScript Object Notation) մասին: Սա տեքստի վրա հիմնված տվյալների փոխանակման արձանագրություն է, որը փոքր-ինչ նման է ավելի ծանոթ XML-ին, սակայն տվյալները գրված են ավելի կոմպակտ: Այն ի սկզբանե մշակվել է JavaScript-ի կարիքների համար (այստեղից էլ՝ անվանումը), սակայն այժմ ավելի լայնորեն օգտագործվում է։

Օրինակ, եթե մենք ուզում ենք զանգված գրել PHP-ից JSON, ապա դա տեղի է ունենում:

Աղբյուրի զանգված.

$n = զանգված ("Min" => 15, "Sec" => 44);

Նույն զանգվածը JSON ձևաչափով.

(«Min»: «15», «Sec»: «44»)

JSON ձևաչափի և դրա հավելվածների մանրամասն նշումը ծրագրավորման տարբեր լեզուների համար հասանելի է http://www.json.org/ կայքում:

Դիտարկենք մի պարզ օրինակ, որը բաղկացած կլինի երկու ֆայլից:

Առաջին ֆայլը կլինի PHP սկրիպտ, որը կստեղծի JSON գրառում, որը պարունակում է ընթացիկ րոպեները և վայրկյանները:

Երկրորդ ֆայլը կլինի HTML էջ, որը պարունակում է JavaScript-ի օգտագործումը jQuery գրադարաններ, որը կկանչի PHP սկրիպտը 1 վայրկյան ընդմիջումներով, կստանա JSON ձայնագրությունը և դրա բովանդակությունը դուրս կբերի վեբ էջի կոնտեյներ:

Ֆայլ #1. json.php

ամսաթիվ ("i"), "Sec" => ամսաթիվ ("s")); echo json_encode ($n); ?>

Ֆունկցիայի ֆայլի առաջին տողում վերնագիր ()մենք սահմանում ենք JSON գրառումի ելքային ձևաչափը, նշում ենք, որ փաստաթուղթը JavaScript է UTF-8 կոդավորմամբ:

Երկրորդ տողում դաշտերով ձևավորում ենք ասոցիատիվ զանգված MinԵվ վրկ, որում գրում ենք ընթացիկ արժեքներըրոպեներ և վայրկյաններ:

Երրորդ տողում ստեղծված զանգվածից ձևավորում ենք JSON գրառում։

Ուշադրություն. json_encode() ֆունկցիան կաշխատի միայն PHP 5.2 և ավելի բարձր տարբերակում:

Ֆայլ #2. օրինակ.html



HTML էջում ստեղծվում է կոնտեյներ տեղեկատվություն. Գործառույթ json_example (), որն աշխատում է վայրկյանում մեկ անգամ, օգտագործում է jQuery ֆունկցիան $.getJSON(), որը սերվերից վերցնում է JSON գրառումը՝ զանգահարելով json.php ֆայլը։ Հաջորդը, ստացված JSON գրառումը ֆունկցիայի միջոցով բաժանվում է բանալի-արժեք զույգերի $.each(), HTML ձևով հավաքվում է փոփոխականի մեջ սև դնել տարայի մեջ տեղեկատվություն, այսինքն. հաճախորդի հավելվածի էկրանին:

Ներբեռնեք սկզբնական ֆայլերի նմուշը (33 կբ).

Կարևոր.
Որպեսզի օրինակները ճիշտ աշխատեն, դուք պետք է.
1. Բոլոր ֆայլերը պետք է գրված լինեն UTF-8 կոդավորմամբ:
2. PHP սկրիպտները պետք է գործարկվեն վեբ սերվերի վրա, այլ ոչ թե գործարկվեն բրաուզերում, ինչպես ֆայլերը:

Երկու հարց կա՝ 1) ինչպես ստանալ այն, ինչ ինձ անհրաժեշտ է տվյալների բազայից: 2) ինչպես փոխանցել այն, ինչ ստացել եմ բազայից javascript-ին, որն ունեմ html ֆայլ. այն ներառում է javascript map.js և map.php ֆայլ: java սկրիպտը նորմալ է աշխատում, բայց php ֆայլը չի ​​աշխատում: Ես չգիտեմ, թե ինչպես կապել javascript-ը և php-ը html ֆայլում: Ես php ու javascript չեմ ուսումնասիրել, մի քիչ այլ մասնագիտություն ունեմ, բայց հիմա, եթե պետք է, պետք է մի բան գրեմ։

ահա map.php կոդը.

այստեղ հիմքից ես պետք է ստանամ տարրերի զանգված կոորդինատ 1 և կոորդինատ 2 զանգվածի տարրի ձևաչափի օրինակ

ապա այս զանգվածը պետք է փոխանցվի javascript-ին, այստեղ այն արդեն նախնականացված է ինձ համար, բայց ես պետք է լրացնեմ այն ​​տվյալների բազայից։ Զանգվածը կոչվում է մարկերներ: map.js

varmap; var կետ = 1; // միավորներ շարժիչի var մարկերների համար = ( point1:, point2:, point3:, point4:, point5:, point6:, point7:, point8:, point9:, point10:, ); $(document).ready(function()( //map var latlng = new google.maps.LatLng(55.755786, 37.617633); var myOptions = ( խոշորացում՝ 13, կենտրոն՝ latlng, mapTypeId՝ google.maps.Maps.MapROTMAy ); var քարտեզ = նոր google.maps.Map(document.getElementById("map_canvas"), myOptions); //նշել քարտեզի վրա բոլոր կետերը var marker = ; for(i մարկերներով)(marker[i] = նոր google . maps.Marker(( դիրքը՝ նոր google.maps.LatLng(markers[i], markers[i]), քարտեզ՝ քարտեզ )); ) //map.panTo(new google.maps.LatLng(markers.point10, մարկերներ .point10)); //point map engine function mover()( map.panTo(new google.maps.LatLng(markers["point"+point], markers["point"+point])); point ++ ; if(point>10)point=1; ) //map չի օգտագործվում google.maps.event.addListener(map, "idle", function()(setTimeout(mover, 500);//time in milliseconds )) ;));

P.S. քանի որ միավորների բացակայության պատճառով ոչ կողմ քվեարկելու, ոչ էլ պատասխանելու տարբերակ չկա, գրեմ այստեղ։ շնորհակալություն հայտնողին Ինկոգնիտո,դեկամերոնօգնության համար. Ես ստացա այն, ինչ ուզում էի իրականացնել։ Ամեն ինչ աշխատում է։ Ես օգտագործեցի decameron-ի գաղափարը: Ես աշխատում եմ php-ով առաջին կամ երկրորդ անգամ: Ի երկար ժամանակովԵս գնել եմ այն, ինչ իմաստ ունի և ինչու չի աշխատում, պարզվում է, որ ես ունեի html ֆայլ և դրա մեջԻնչպես նաեւ

Եթե ​​դուք կատարում եք ներկառուցված տվյալներ, ես միշտ սիրել եմ դա անել

Հիմնական նյութերի համար դուք պահում եք AJAX-ի հետ կանչը: Բացի այդ, եթե ցանկանում եք տվյալները կպցնել DOM հանգույցին, «մետաօբյեկտ» ճանապարհն այն է, ինչ ես իսկապես սիրում եմ:

Սա կարող է հիմա լավ տեսք չունենալ, բայց դա արդյունավետ միջոց է տվյալների ուղղակիորեն DOM հանգույցին կապելու համար՝ առանց իմանալու այդ հանգույցի ճշգրիտ եզակի ուղին: Շատ հարմար է, եթե ունեք բազմաթիվ տվյալների հավաքածուներ, որոնք պետք է կապված լինեն էկրանի հատուկ տարրերի հետ:

Ես սովորաբար օգտագործում եմ jQuery plugin-ը http://noteslog.com/metaobjects/, բայց դա այնքան հեշտ է, որ երբեմն ինքս գրում եմ այն ​​(կար ժամանակ, երբ ես չէի կարողանում գտնել plugin-ը, բայց նոր էի աշխատում)

Երբ դա արվի, կլինի

$("div#foobar>div"): ստանալ (). տվյալներ ($yourrayhere)

Տեսանելի է ձեր կոդը:

Ձեր հարցին պատասխանելու համար (և իմ պատասխանը, ես ավարտեցի բացատ մեկնաբանության պատասխանում), ահա իմ օգտագործած կոդի շատ պարզեցված ենթաբազմություն.

Javascript AJAX մշակիչ jQuery-ում.

$ . ajax (( type: "POST", url: "BACKEND.php", timeout: 8000, data: "var1=" + myVar, dataType: "json", error: function ()($ ("#DIVID"): html ( "
սխալ!
"
); ), հաջողություն՝ ֆունկցիա (jsonObj )( $ ("#DIVID" ).html (jsonObj . mydata ); ) )); PHP զանգված՝ $data [ "mydata" ] = $myData ;

Ես դեռ շատ նոր եմ, որպեսզի ասեմ, որ գուցե այս մեթոդը ամենաանվտանգը չէ, բայց դուք միշտ կարող եք ձեր javascript զանգվածը վերածել տողի և այնուհետև փոխանցել այն url-ի միջով php-ին՝ GET-ի համար:

համար (var i = 0; i< jsarray . length ; i ++) { var x = jsarray [ i ]; urlstring += "myvalue="+ x +"&" ; } document . location . href = "mypage.php?" + urlstring ;

և ապա php-ը կլինի.

$phparray = $_GET["myvalue"];

հուսով եմ, որ սա օգնում է