• 1399/10/26

json and response :

با سلام

فرض کنیم سمت سرور سه تا کوئری میزنیم تا اطلاعات را بدست آوریم حالا می خواهیم به روش json این اطلاعات که شامل هر کوئری یک آرایه هست را دریافت و نمایش بدهیم

ابتدا اطلاعات را به json-encode‌تبدیل می کنیم

بعد از این کار

{"id":"13","codeProduct":"114","name":"parche","image":"assets\/img\/sho.jpeg","purchasePrice":"0","sellPrice":"0","primaryQty":"110","existQty":"47","sellQty":"0","userId":null,"created_at":"2021-01-08 15:10:00","update_at":null, }[{"name":"green"},{"name":"yellow"}][{"name":"12"},{"name":"33"}]

اطلاعات این طوری در کنار هم قرار می گیرند

این شکل خروجی نه بصورت object‌هست

نه بصورت آرایه

چه باید بکنیم؟

 

 

  • 1399/10/26
  • ساعت 12:52

با سلام خدمت شما همراه عزیز

 

json decode کنید تبدیل به ابجکت میشه و ارایه ایی


  • 1399/10/26
  • ساعت 15:13

یعنی سمت سرور خروجیشو بجای

Encode

بايد decode كنم؟

Decode مگر برای زمانی نیست که اطلاعات از سمت کلاینت میاد برای خواندن در php

Decode ميكنيم


  • 1399/10/26
  • ساعت 15:34

خب شما مگه نمیخوایید ساختار json رو به ابجکت و ارایه تبدیل کنید؟ 


  • 1399/10/27
  • ساعت 10:56

بله من می خواهم بصورت ابجکت یا آرایه شود

ولی همان طور که از شما یاد گرفتم و در آموزش های مختلف خوندم

json_decode زمانی استفاده می شود که اطلاعات از سمت کلاینت برای php فرستاده می شود

برای آنکه بتوان json موردنظر را خواند باید decode کرد

الان من می خواهم اطلاعات را به سمت کلاینت بفرستم

پس باید encode کنم

 

اساسا ایراده این به 

نوع این داده هست

[{"name":"12"},{"name":"33"}]

حتی من به روش اطلاعات را به این صورت در آوردم

'{"id":"13","codeProduct":"114","name":"parche","image":"assets\/img\/sho.jpeg","purchasePrice":"0","sellPrice":"0","primaryQty":"110","existQty":"47","sellQty":"0","userId":null,"created_at":"2021-01-08 15:10:00","update_at":null,"0":{"name":"green"},"1":{"name":"yellow"}}'

دقیقا این خروجی برای تابع JSON.parce مناسبه ولی باز خطا میده

Uncaught SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at XMLHttpRequest.http.onreadystatechange

 


  • 1399/10/27
  • ساعت 11:04

شما اطلاعات رو اگر میخوایید به کلاینت بدید پس چرا همچین تایپی داره؟ 

شما اطلاعات ارایه ای میگیرید از سرور

و بعد json میکنید میدید به کلاینت


  • 1399/10/28
  • ساعت 00:00

واقعا منم در تعجبم


  • 1399/10/28
  • ساعت 00:03

بررسی کنید شاید جایی رو اشتباه کردید

 

در pdo دو حالت داره هم میتونید ابجکت بگیرید هم ارایه


  • 1399/10/29
  • ساعت 11:25

سلام

شاید بهتر باشه سوالم را جور دیگر مطرح کنم

کدهای سمت کلاینت من برای درخواست اطلاعات از دیتابیس برای یک card مشخص و نمایش در یک مدال

function select(elem) {
    return document.querySelector(elem);
}
function selectAll(elem) {
    return document.querySelectorAll(elem);
}
// get id of card for per request
selectAll('.card').forEach(function(card) {
    card.addEventListener('click', function() {
        let id = this.dataset.id;
        var http = new XMLHttpRequest();
        var baseAddress = location.href;
        var url = baseAddress + '/show'
        var params = 'id=' + id;
        http.open('POST', url, true);
        http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        var result = '';
        http.onreadystatechange = function() {
            if (http.readyState == 4 && http.status == 200) {
                result = JSON.parse(http.responseText);
                //response data of server
                select('.product-modal-img').src = result.image;
                select('.product-modal-name').innerHTML = result.name;
                select('.product-modal-code').innerHTML = result.codeProduct;
            }
        }
        http.send(params);
        // display data in modal page
        select('.project-modal').style.cssText = 'transform: scale(1);opacity: 1;'
    });
});
select('.pm-close img').addEventListener('click', function() {
    //close modal page
    select('.project-modal').style.cssText = 'transform: scale(0);opacity: 0;'
});

کدهای سمت php برای دریافت اطلاعات از  دیتابیس و فرستادن به کلاینت


public function show()
{
    $id = $_POST['id'];
    $db=new DataBase();
    //get data product from database
    $product=$db->select("SELECT  * FROM `products`WHERE `id`=?;" , [$id])->fetch();
    //get data colors from database
    $colors=$db->select("SELECT `colors`.`name` FROM `colors` WHERE `colors`.`id` IN (SELECT `colorSize`.`colorId` FROM `colorSize` WHERE `colorSize`.`productId`=?);", [$id])->fetchAll();
    //get data sizes from database
    $sizes=$db->select("SELECT `sizes`.`name` FROM `sizes` WHERE `sizes`.`id` IN (SELECT `colorSize`.`sizeId` FROM `colorSize` WHERE `colorSize`.`productId`=?);", [$id])->fetchAll();
    // json_encoding data
    $jsonProduct = json_encode($product);
    $jsonColors = json_encode($colors);
    $jsonSizes = json_encode($sizes);
}

آیا طریقه json_encode من اشتباه است؟

باید بصورت دیگه ای انجام شود؟

این روش برای متغیر product به تنهایی درست است ولی وقتی متغیرهای دیگر اضافه می شوند در سمت کلاینت مشکل دارم

بنظرم دلیلش تو در تو بودن متغیر colors و sizes است

نحوه دریافتم ایراد دارد

احتمالا نیاز به foreach‌هست؟

 


  • 1399/10/29
  • ساعت 11:40

داخل stack overflow پرسیدم و جوابشون این بود

 

you have to make an array and set all result to that array and after that encode it to json

#example

json_encode(array("product"=>$product,"colors"=>$colors,"sizes"=>$sizes));

after this you will got perfect json object

 

اول یک ارایه اش کنم بعدا بفرستم سمت کلاینت


  • 1399/10/29
  • ساعت 11:47

 

شما اطلاعات ارایه ای میگیرید از سرور

و بعد json میکنید میدید به کلاینت

 

 

همون پاسخی که بنده گفتم خدمتتون


  • 1399/10/29
  • ساعت 11:48

در نهایت شما json دارید و باید با اون بازی کنید


  • 1399/10/29
  • ساعت 11:49

ولی همون خطا رو دارم

 

آیا برای دریافتش تغییر خاصی باید بدهم؟


  • 1399/10/29
  • ساعت 11:50

اول مطمن بشید که ارایه میگیرید بعد تبدیل کنید


  • 1399/10/29
  • ساعت 12:19

وقتی بصورت یک آرایه در می آورم

  $res=array($product,$colors,$sizes);

تبدیل میشه به یک آرایه تو در تو

وقتی foreach  میزنم

 
    foreach ($res as $key ) {
        foreach ($key as $value ) {
            echo $value;
        }
    }

خروجی بصورت زیر است

13114parcheassets/img/sho.jpeg001104702021-01-08 15:10:00ArrayArrayArrayArray

اینم مطلوب نیست و عمل json_encode را بروی آن نمیشه انجام داد


  • 1399/10/29
  • ساعت 12:40

خب شما دارید یک ارایه رو به ارایه تبدیل میکنید

 

وقتی خودش ارایه هست چرا دوباره ارایه میکنید


  • 1399/10/29
  • ساعت 13:06

این ها هرکدام ارایه های جداگانه بودند

مرتبه اول اومدم هر آرایه را جداگانه json_encode کردم فرستادم سمت کلاینت

json.parse براش قابل قبول نبود

مرتبه بعدی merge کردم بازم قبول نکرد

مرتبه آخر هم یه آرایه کلی کردم

بعد json_encode کردم باز json.parse خطا داد


  • 1399/10/29
  • ساعت 13:26

هر کدوم از ارایه ها بخوان تبدیل به جی سان بشن نباید ارور بگیرید حتما جایی رو اشتباه میکنید


  • 1399/10/29
  • ساعت 17:28

سلام

آرایه اول من که مشکلی نداره به این صورته

array (size=12)
  'id' => string '13' (length=2)
  'codeProduct' => string '114' (length=3)
  'name' => string 'parche' (length=6)
  'image' => string 'assets/img/sho.jpeg' (length=19)
  'purchasePrice' => string '0' (length=1)
  'sellPrice' => string '0' (length=1)
  'primaryQty' => string '110' (length=3)
  'existQty' => string '47' (length=2)
  'sellQty' => string '0' (length=1)
  'userId' => null
  'created_at' => string '2021-01-08 15:10:00' (length=19)
  'update_at' => null

وقتی به json‌تبدیل میشه

به این صورته

{"id":"13","codeProduct":"114","name":"parche","image":"assets\/img\/sho.jpeg","purchasePrice":"0","sellPrice":"0","primaryQty":"110","existQty":"47","sellQty":"0","userId":null,"created_at":"2021-01-08 15:10:00","update_at":null}

آرایه دوم و سوم من تو در تو هستن

به این صورت

array (size=2)
  0 => 
    array (size=1)
      'name' => string 'green' (length=5)
  1 => 
    array (size=1)
      'name' => string 'yellow' (length=6)

وقتی به json تبدیل می شوند 

[{"name":"green"},{"name":"yellow"}]

این فرمت برای json.parse‌قابل قبول نیست

من کار غیر معمولی انجام ندادم تنها فرق آرایه ها

دوبعدی و تک بعدی بودن هست


  • 1399/10/29
  • ساعت 17:34

https://stackoverflow.com/questions/10084234/how-to-parse-multi-dimensional-json-data-through-javascript


logo-enamadlogo-samandehi