A-AA+then

มีปัญหาในการใช้ include ใน AJAX กับ PHP

2,584

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

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

17 ความคิดเห็น

ตรวจสอบ 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;
  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.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
^