มีปัญหาในการใช้ include ใน AJAX กับ PHP
ถามผู้รู้ทุกท่านนะค่ะ
การเขียน php กับ ajax หนูเขียนโค้ดให้ทำงาน ดังนี้
1. ไฟล์ที่ใช้ run เพื่อแสดงผล และเป็นไฟล์ที่ใช้เรียก framwork นามสกุล js ไฟล์นี้นามสกุล php
2. ไฟล์ที่ใช้ทำงานเบื้องหลัง เพื่อทำการประมวลผลแล้วส่งค่ากลับไปแสดงยังไฟล์แรก ไฟล์นี้เป็นนามสกุล php เช่นเดียวกัน
หนูมีปัญหาติดอยู่ที่ไฟล์ที่ 2 นี่แหละค่ะ
เนื่องจากหนูจะเขียนไฟล์ที่เป็นฟังก์ชันต่างๆ ด้วย php แล้วใช้ไฟล์ที่ 2 เรียก <? include 'xxx.php' ?> ให้ฟังก์ชันที่เขียนไว้มาทำงานในไฟล์ที่ 2
หากเรารันในเครื่อง server จำลองจะสามารถทำงานได้ดี แต่หากเราเอาขึ้น server จริง จะติดปัญหาที่ include
ทั้งนี้หนูได้ลองเปลี่ยนการเรียกฟังก์ชันมาใช้งานด้วยคำสั่งต่างๆ เช่น require, require_once, include แต่ผลลัพธ์ก็ยังติด เหมือนเดิม ไม่รู้ว่ามาจากสาเหตุใด
ตอนนี้หนูได้แก้ปัญหาโดยการเขียนฟังก์ชันขึ้นมาในไฟล์ที่ 2 เลย โดยไม่ต้อง include ผลลัพธ์ก็สามารถทำงานได้
แต่หนูคิดว่าเป็นการแก้ปัญหาที่ไม่ค่อยดี เนื่องจากหากเราต้องการเปลี่ยนการเขียนโค้ดในฟังก์ชันเราก็ต้องไปเปลี่ยนทุกหน้าที่มีฟังก์ชันนั้นอยู่ ซึ่งเป็นการยากในการแก้ไข
ขอความกรุณาผู้รู้ช่วยตอบปัญหาข้องใจให้หนูด้วยนะค่ะ
ไฟล์ฟังก์ชัน ก็อยู่ในโฟลเดอร์เดียวกันกับไฟล์ที่ 1 และ 2ค่ะ
เราจะระบุ path ยังไงค่ะ
ส่งไฟล์ test มาให้ลองดูนะค่ะ
รูปนี้ run ที่server จำลอง
ไฟล์ First.php
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="AjaxFramework.js"></script>
<script>
function ajaxCall(){
var data=getFormData("frm");
//data+="&bt="+bt;
var URL="behide.php";
ajaxLoad("post",URL,data,null,null);
}
</script>
</head>
<body>
<form id="frm" name="frm" method="post" action="">
<table width="200" border="1">
<tr>
<td>number1</td>
<td><label>
<input type="text" name="textfield" id="textfield" />
</label></td>
</tr>
<tr>
<td>number2</td>
<td><label>
<input type="text" name="textfield2" id="textfield2" />
</label></td>
</tr>
<tr>
<td> </td>
<td><label>
<input type="button" name="button" id="button" value="+" onclick="ajaxCall();" />
</label></td>
</tr>
</table>
answer = <span id="msg"></span>
<label></label>
</form>
</body>
</html>
ไฟล์ behide.php
<?
require('function.php');
$num1=$_POST['textfield'];
$num2=$_POST['textfield2'];
//$bt=$_POST['bt'];
$ans=plusnum($num1,$num2);
$js = <<<JS
var el = document.getElementById('msg');
el.innerHTML = "$ans";
JS;
header("content-type: text/javascript; charset=tis-620");
$js=iconv('utf-8','tis-620',$js);
echo $js;
?>
<?
function plusnum($num1,$num2){
$ans=$num1+$num2;
return $ans;
}
?>
ไฟล์ AjaxFramwork.js
function ajaxLoad(method, URL, data, displayId, displayPic) {
var ajax = null;
if(window.ActiveXObject) {
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest) {
ajax = new XMLHttpRequest();
}
else {
alert("Your browser doesn't support Ajax");
return;
}
method = method.toLowerCase();
URL += "?dummy=" + (new Date()).getTime();
if(method.toLowerCase()=="get") {
URL += "&" + data;
data = null;
}
ajax.open(method, URL,true);
//ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=tis-620");
if(method.toLowerCase()=="post") {
ajax.setRequestHeader(
"Content-Type","application/x-www-form-urlencoded");
}
ajax.onreadystatechange = function() {
if(ajax.readyState==4 && ajax.status==200) {
var ctype = ajax.getResponseHeader("Content-Type");
ctype = ctype.toLowerCase();
ajaxCallback(ctype, displayId, ajax.responseText, displayPic);
delete ajax;
ajax = null;
}
}
ajax.send(data);
}
function ajaxCallback(contentType, displayId, responseText, displayPic) {
if(contentType.match("text/javascript")) {
/* var el1 = document.getElementById(displayPic);
el1.style.display = 'none'; */
eval(responseText);
}
else {
var el1 = document.getElementById(displayPic);
el1.style.display = 'none';
var el = document.getElementById(displayId);
el.innerHTML = responseText;
}
}
function getFormData(form_name_or_id) {
var frm = document.forms[form_name_or_id];
if(frm==null) {
alert("form not found!");
return;
}
var data = "";
var num_el = frm.elements.length;
for(i=0; i<num_el; i++) {
var el = frm.elements[i];
if(el.name=="" && el.id=="") {
continue;
}
var param_name = "";
if(el.name!="") {
//data += el.name;
param_name = el.name;
}
else if(el.id!="") {
//data += el.id;
param_name = el.id;
}
var t = frm.elements[i].type;
var value = "";
if(t=="text"||t=="password"||t=="hidden"||t=="textarea") {
value = encodeURI(el.value);
//value = el.value;
}
else if(t=="radio"||t=="checkbox") {
if(el.checked) {
value = encodeURI(el.value);
//value = el.value;
}
else {
continue;
}
}
else if(t=="select-one") {
value = encodeURI(el.options[el.selectedIndex].value);
//value = el.options[el.selectedIndex].value;
}
else if(t=="select-multiple") {
for(j=0; j<el.length; j++) {
if(el.options[j].selected) {
if(data!="") {
data += "&";
}
data += param_name + "=";
data += encodeURI(el.options[j].value);
//data += el.options[j].value;
}
}
continue;
}
//ËÒ¡ÁÕ¢éÍÁÙÅÍÂÙè¡è͹áÅéÇ ãËé¤Ñè¹´éÇÂà¤Ã×èͧËÁÒ "&"
if(data!="") {
data += "&";
}
data += param_name + "=" + value;
}
return data;
}
2.ลองใช้ firefox ติดตั้ง firebug แล้วลองดู error อีกที
อ้อ บอกว่าบน server ขอ URL มาดูหน่อย
el1.style.display = 'none';
หา el1 ไม่เจอ
ลองใช้ firefox และ ติดตั้ง firebug ครับ จะช่วยให้หาข้อผิดพลาดได้ง่ายขึ้น
ขอบคุณมากค่ะ
แล้วโปรแกรม firefox ที่ว่านี้เราหาติดตั้งได้ที่ไหนค่ะ
หากว่าเราลง IE กับ Firefox ในเครื่องเดียวกันจะมีปัญหาในการทำงานไหมค่ะ
ดาวน์โหลดได้ที่ไหนค่ะ