มีปัญหาในการใช้ 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 ผลลัพธ์ก็สามารถทำงานได้
แต่หนูคิดว่าเป็นการแก้ปัญหาที่ไม่ค่อยดี เนื่องจากหากเราต้องการเปลี่ยนการเขียนโค้ดในฟังก์ชันเราก็ต้องไปเปลี่ยนทุกหน้าที่มีฟังก์ชันนั้นอยู่ ซึ่งเป็นการยากในการแก้ไข

ขอความกรุณาผู้รู้ช่วยตอบปัญหาข้องใจให้หนูด้วยนะค่ะ
 

27 เม.ย. 2552 17 5,051

ตรวจสอบ path ให้ถูกต้องครับ
#1

ไฟล์ฟังก์ชัน ก็อยู่ในโฟลเดอร์เดียวกันกับไฟล์ที่ 1 และ 2ค่ะ
เราจะระบุ path ยังไงค่ะ

#2

ลองเอา error มาดูครับ
#3

มันจะ error ตรงด้านล่างของ IE แล้วไม่ได้แจ้ง error บอกว่ามาจากอะไร
ส่งไฟล์ test มาให้ลองดูนะค่ะ
#4

รูปนี้ run ที่server จำลอง

#5

ไฟล์ 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>&nbsp;</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>
 

#6

ไฟล์ 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;

?>

#7

ไฟล์ function.php
<?
function plusnum($num1,$num2){
 $ans=$num1+$num2;
    return $ans;

?>
#8

ไฟล์ 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;

}


 

#9

1.dblclick ที่ icon error แล้วลองดูว่า มีคำอธิบายเพิ่มเติมมั้ย
2.ลองใช้ firefox ติดตั้ง firebug แล้วลองดู error อีกที

อ้อ บอกว่าบน server ขอ URL มาดูหน่อย
#10

จาก error ที่เห็น ข้อผิพลาดเกิดจากส่วนของ Javascript ครับ เท่าที่ดูโค้ดก็ยังไม่พบข้อผิดพลาดอะไร แต่ถ้าเห็นเว็บก็อาจใช้เครื่องมือเพื่อหาข้อผิพลาดได้ครับ
#11

#12

error บบรทัดนี้

el1.style.display = 'none';

หา el1 ไม่เจอ

ลองใช้ firefox และ ติดตั้ง firebug ครับ จะช่วยให้หาข้อผิดพลาดได้ง่ายขึ้น

#13

ขอบคุณมากค่ะ
แล้วโปรแกรม firefox ที่ว่านี้เราหาติดตั้งได้ที่ไหนค่ะ

#14

หากว่าเราลง IE กับ Firefox ในเครื่องเดียวกันจะมีปัญหาในการทำงานไหมค่ะ

#15

ไม่มีครับ ผมก็ใช้อยู่ และควรมีด้วย
#16

ดาวน์โหลดได้ที่ไหนค่ะ

#17
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^