|
|
|
เกิดปัญหาการใช้ json_encode() ใน ie กับการรับค่าใน javascript |
|
|
|
|
|
|
|
Code (JavaScript)
$.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'auto': 'auto'},
dataType : "jsondata",
success: function(data) {
var obj = JSON.parse(data);
alert(obj .day);
}
ไฟล์ update.php
Code (PHP)
$array = array('day' =>'1');
echo json_encode($array);
บนเบราเซอร์ google chome , firefox , และ safari ทำงานได้ แต่ ie 10 ไม่ทำงาน ใครมีแนวทางที่ดี แนะนำหน่อยครับ
ขอบคุณมากครับ
Tag : PHP, JavaScript, Ajax, jQuery
|
|
|
|
|
|
Date :
2013-09-29 22:31:50 |
By :
big |
View :
1128 |
Reply :
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เท่าที่ดูก็ถูกแล้วนะครับ เป็นไปได้ไมครับว่าไฟล์หน้า ajax มึจาวาสคริปตรงอื่นผิดครับ ให้ลองตรวจสอบดูครับ
|
|
|
|
|
Date :
2013-09-30 03:50:36 |
By :
xbeginner01 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (JavaScript)
alert(data);
ดูค่าตัวนี้หน่อยครับ
|
|
|
|
|
Date :
2013-09-30 05:59:46 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ครับใน ie แจ้งว่า
SCRIPT1002: Syntax error
var obj = JSON.parse(data);//บรรทัดที่แจ้งว่า error
alert(data); ออกมา ไม่มีค่าอะไรเลย เป็นใน ie อย่างเดียว บนเบราเซอร์อื่น มีค่าปกติครับ
|
|
|
|
|
Date :
2013-09-30 06:44:32 |
By :
big |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองเปลี่ยนชื่อตัวแปรดูใหม่ครับ ทั้งตัวแปร ที่ส่งค่า กับตัวแปรที่ return
รู้สึกว่า มันจะใช้ data จนจนเพลิน เลยลืมทำงานมั่งครับ
|
|
|
|
|
Date :
2013-09-30 07:08:39 |
By :
deawx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ปัญหาคงไม่ได้อยู่ที่ json_encode() ในฝั่ง PHP แต่น่าจะอยู่ที่ javascript
เท่าที่รู้ setting ของ jQuery.ajax() ชื่อว่า dataType ไม่มี "jsondata" ครับ มีแต่ "json"
ลองเปลี่ยนเป็น "json" ดู แล้วก็ไม่ต้องใช้ JSON.parse() เพราะมันจะทำการ parse ให้อัตโนมัติ
แต่ถ้าคุณต้องการ parse แบบ manual ต้องใช้ dataType "text" ครับ (หรือตัด dataType ทิ้งไปเลย)
dataType = "json"
$.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'auto': 'auto'},
dataType : "json",
success: function(data) {
//var obj = JSON.parse(data);
alert(data.day);
}
dataType = "text"
$.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'auto': 'auto'},
dataType : "text",
success: function(data) {
var obj = JSON.parse(data);
alert(obj.day);
}
|
ประวัติการแก้ไข 2013-09-30 08:25:14
|
|
|
|
Date :
2013-09-30 08:24:39 |
By :
phpinfo() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คือ ผมลองกับ ie 8 กับ 9 ก็ทำงานได้คราฟ พอมาเป็น ie 10 ก็ไม่ทำงานเหมือนเดิม อาจเป็นที่ ie 10 ที่เครื่องผมอาจจะไม่สมบูรณ์ก็ได้ครับ
ขอบคุณทุกความคิดเห็นครับ
|
|
|
|
|
Date :
2013-09-30 10:08:35 |
By :
big |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าอย่างนั้นอาจจะมีอีกสาเหตุนึงครับ
update.php
$array = array('day' =>'1');
echo json_encode($array);
ไฟล์นี้เนี่ย มีแค่นี้หรือเปล่า
ก่อนหน้านั้นมี output อะไรหรือไม่ ไม่ว่าจะเป็น newline หรือว่า UTF-8 BOM
ลองดูแบบนี้ครับ แล้ว save ไฟล์ให้เป็น UTF-8 without BOM ดู
<?php
header('Content-Type: text/plain');
$array = array('day' =>'1');
echo json_encode($array);
เพราะเป็นไปได้ว่า JSON.parse() ใน IE10 อาจจะไม่รับ JSON ที่มี newline หรือ UTF-8 BOM อยู่ก่อนข้อมูล
หรืออาจจะเป็นเพราะ header ส่งมาเป็นชนิดอื่น
|
|
|
|
|
Date :
2013-09-30 10:23:46 |
By :
phpinfo() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมคิดว่า น่าจะเป็นเพราะ JSON.parse
ลองแบบนี้ดูน่ะครับ
Code (PHP)
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
$.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'auto': 'auto'},
dataType : "json",
success: function(data) {
var json = $.parseJSON(data);
alert(json.day);
}
);
</script>
|
|
|
|
|
Date :
2013-09-30 10:59:13 |
By :
mangkunzo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|