گرفتن json با ارسال پارامتر به صورت Post (حل شد)
با سلام خدمت دوستان و اساتید گرامی
یک مشکلی هست که دو روزه بهش بر خوردم هر کار کردم رفع نشد کل انجمن و گوگل و 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);
}
دوستان اینم از LogCat :
طبق اخرین تست های انجام شده متوجه شدم که از سمت اندروید این تگ ها ارسال می شود و حالا این ارسال تگ ها برای چی هست ؟ ایا به علت منسوخ شدن Httpclientو HttpPost و یا UrlEncodedFromEntity هست؟
دوستان از کتابخانه Volley برای تست دپریکیت شدن Httclient نیز استفاده کردم ولی باز هم همون جواب رو بر میگردونه
دیگه کلافه شدم یکی کمک کنه :/
اگر با همچنین مشکلی برخوردید ابتدا کل اطلاعاتی که از سمت سرور دریافت میکنید رو در لاگ چاپ کنید سپس لاگ رو داخل یک نت پد کپی کنید(فقط همان بخشی که می خواهید از سمت سرور دریافت کنید به همراه تگ ها ) سپس نت پد رو با پسوند Html ذخیره کنید تا بتوانید خطای ناشی از سمت سرور رو ببینید
مشاهده میکنید که جیسون خالص است و فقط این تگ های عجیب همان خطاهایی است که از سمت سرور برای ما ارسال شده است
من در این لاگ خطای Undifined index مشاهده کردم احتمالا شما هم با همین خطا مواجه میشید که میتواند ناشی از :
1.اشتباه در تعریف ایندکس ها(به کلیدی که به عنوان پارامتر از سمت اندروید میفرستید و همچنین دریافت آن سمت سرور توجه کنید)
2.قرار دادن دستور الحاق پارامتر به Method (همان setEntity) بعد از دستور اجرای آن باشد (اشتباه خیلی بد :/ )
3.استفاده از توابعی چون setHeader برای Method(در استفاده از این توابع باید حواسمان رو جمع کنیم).
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .