بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

گرفتن json با ارسال پارامتر به صورت Post (حل شد)

مدیریت گفتگو
fandroid 10 سال پیش
آخرین تغییر: 10 سال پیش

با سلام خدمت دوستان و اساتید گرامی

یک مشکلی هست که دو روزه بهش بر خوردم هر کار کردم رفع نشد کل انجمن و گوگل و Stachoverflowو ... رو پیرامونش گشتم و راه های مختلفی که گفته بودن رو اعمال کردم مشکل رفع نشد دیگه گفتم از تجربه دوستان استفاده کنم شاید برای شما هم اتفاق افتاده باشه

خب مشکل اینه که وقتی با استفاده از متد post اطلاعاتی رو به سمت سرور میفرستم در جواب به همراه Json خالص تگ های Html که بیشتر اونها از نوع Font هستند نیز ارسال می شود

تو یکی از پست ها(این) خود استاد گفتن که احتمال داره یکسری کاراکتر های اضافی به اسم Bom ارسال بشه و بهEncodeکردن فایل سمت سرور مرتبط میشه ولی خب انجام دادم درست نشد

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

اینم بگم که احتمال دادم به خاطر دپریکیت شدن HttpClient باشه ولی تست مجددی که گرفتم درست کار کرد و حتی یک نکته جالب تر اینکه وقتی همین کار رو با روش Get فرستادم کاملا کد ها سالم اجرا شد  

اخطاری که از من میگیره دقیقا با پست یکی دوستامون یعنی (این) برابر هست و مو نمیزنه میخواستم ببینم میتونید بگید اشکال میتونه از کجا آب بخوره ؟

کد بخش سرور : (تابه read بدرستی کار میکند ولی مشکل در تابع search است)

 <?php
# header('Content-Type: text/html; charset=utf-8');
if(isset($_REQUEST['action'])){
$action=$_REQUEST['action'];
}else{
echo "not Operations";
}
if($action=="read"){
read();
}elseif($action=="search"){
search();
}
function connection(){
$con=mysqli_connect("localhost","root","","ariacad_app");
mysqli_set_charset($con, 'utf8');
if(mysqli_connect_errno()){
echo "this error is ".mysqli_connect_error();
return;
}
return $con;
}
function read(){
$con=connection();
$result=mysqli_query($con,"SELECT * FROM plan");

$output=array();
while($row=mysqli_fetch_array($result)){

$record=array();
$record['plan_id']=$row['plan_id'];
$record['plan_title']=$row['plan_title'];
$record['plan_code']=$row['plan_code'];
$record['plan_price']=$row['plan_price'];
$record['plan_substruction']=$row['plan_substruction'];
$record['plan_height']=$row['plan_height'];
$record['plan_width']=$row['plan_width'];

$output[]=$record;
}
# print_r($output);
# echo "<br>";
echo json_encode($output);
}
function search(){
$con=connection();
$width=$_REQUEST['plan_width'];
$height=$_REQUEST['plan_height'];
//echo $_REQUEST['plan_height'].$_REQUEST['plan_height'];
$result=mysqli_query($con,"SELECT * FROM plan WHERE plan_height='".$height."' and plan_width='".$width."'");

$output=array();
while($row=mysqli_fetch_array($result)){

$record=array();
$record['plan_id']=$row['plan_id'];
$record['plan_title']=$row['plan_title'];
$record['plan_code']=$row['plan_code'];
$record['plan_price']=$row['plan_price'];
$record['plan_substruction']=$row['plan_substruction'];
$record['plan_height']=$row['plan_height'];
$record['plan_width']=$row['plan_width'];

$output[]=$record;
}
echo json_encode($output);
}

نظرات

hamcalas 10 سال پیش
کدهای php که Json تولید می کنه را کپی کنید ، فایل فوق را حذف کنید ، مستقیما (بدون استفاده از note pad ,....)در داخل مدیریت فایل سرور یک فایل به همان نام قبلی ایجاد کنید و کدهایی که کپی کردید را در آن paste کنید
fandroid 10 سال پیش
دوست عزیز کاری که گفتین رو انجام دادم ولی مشکل همچنان باقیست اگر نیازی به قسمت هایی از کد هست بگید درج کنم بابت پاسخ سپاس گذارم
احمد 10 سال پیش
مشکل از سمت فایل php یه کاراکتر اضافی داری که چیسونت را خراب می کنه فایل php را اجرا کن ببن خطایی نداشته باشی
fandroid 10 سال پیش
دوست عزیز سمت سرور رو تست گرفتم جالبه وقتی به جای استفاده از $_REQUEST مقدار پیش فرض داخل متغیر ها قرار میدم و خط هایی که $_REQUSET دارند رو کامنت میکنم خروجی جیسون خالصه که این نشون میده از سمت کلاینت یکسری متن های اضافی ارسال میشه
احمد 10 سال پیش
توی برنامت ببین اسم ستونی را اشتباه نگذاشتی
fandroid 10 سال پیش
نه عزیز اینقدر پیش پا افتاده به نظر نمیرسه چون از هر قسمت دیگش تست گرفتم
احمد 10 سال پیش
ببین توی لاگ عبارت no value for داری؟
fandroid 10 سال پیش
نه دوست عزیز مشکل حل شد پایین به عنوان پاسخ درج کردم

پاسخ‌ها 3

fandroid 10 سال پیش

دوستان اینم از LogCat :

طبق اخرین تست های انجام شده متوجه شدم که از سمت اندروید این تگ ها ارسال می شود و حالا این ارسال تگ ها برای چی هست ؟ ایا به علت منسوخ شدن Httpclientو HttpPost و یا UrlEncodedFromEntity هست؟  

نظرات

کاشی زاده 10 سال پیش
مشکل شما به خاطر خالص نبودن JSON هست و همونطور که میبینید در خطا ها گفته تگ وجود داره .
fandroid 10 سال پیش
مشکلش رو برطرف کردم یک اشتباه خیلی بدی کرده بودم حالا پاسخ کاملش رو در یک پست دیگه میذارم که اگر کسی با این مشکل مواجه شد بتونه حلش کنه
fandroid 10 سال پیش

دوستان از کتابخانه Volley  برای تست دپریکیت شدن Httclient نیز استفاده کردم ولی باز هم همون جواب رو بر میگردونه

دیگه کلافه شدم یکی کمک کنه :/

نظرات

fandroid 10 سال پیش

اگر با همچنین مشکلی برخوردید ابتدا کل اطلاعاتی که از سمت سرور دریافت میکنید رو در لاگ چاپ کنید سپس لاگ رو داخل یک نت پد کپی کنید(فقط همان بخشی که می خواهید از سمت سرور دریافت کنید به همراه تگ ها ) سپس نت پد رو با پسوند Html ذخیره کنید تا بتوانید خطای ناشی از سمت سرور رو ببینید

مشاهده میکنید که جیسون خالص است و فقط این تگ های عجیب همان خطاهایی است که از سمت سرور برای ما ارسال شده است

من در این لاگ خطای Undifined index مشاهده کردم احتمالا شما هم با همین خطا مواجه میشید که میتواند ناشی از :

1.اشتباه در تعریف ایندکس ها(به کلیدی  که به عنوان پارامتر از سمت اندروید میفرستید و همچنین دریافت آن سمت سرور توجه کنید)

2.قرار دادن دستور الحاق پارامتر به Method (همان setEntity) بعد از دستور اجرای آن باشد (اشتباه خیلی بد :/ )

3.استفاده از توابعی چون setHeader برای Method(در استفاده از این توابع باید حواسمان رو جمع کنیم).

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .