ส่งค่าด้วย Ajax แล้วค่าที่ไปบันทึกมันเป็น nullundefined
ส่งค่าด้วย Ajax แล้วค่าที่ไปบันทึกมันเป็น nullundefined คือดึงค่ามาจาก textbox ครับ
สคริป
Code
<script language="JavaScript">
<!--
var HttPRequest = false;
function doCallAjax(direct_id) {
HttPRequest = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
HttPRequest = new XMLHttpRequest();
if (HttPRequest.overrideMimeType) {
HttPRequest.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
HttPRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
HttPRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!HttPRequest) {
alert('Cannot create XMLHTTP instance');
return false;
}
var url = 'report_direct_sale_show_n_finish_update.asp';
var pmeters = 'Direct_n_finish_detail=' + document.getElementById('Direct_detail_')+direct_id.value + '&Direct_ID='+direct_id;
HttPRequest.open('POST',url,true);
HttPRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
HttPRequest.setRequestHeader("Content-length", pmeters.length);
HttPRequest.setRequestHeader("Connection", "close");
HttPRequest.send(pmeters);
HttPRequest.onreadystatechange = function()
{
if(HttPRequest.readyState == 3) // Loading Request
{
document.getElementById("mySpan_" + direct_id).innerHTML = "Now is Loading...";
}
if(HttPRequest.readyState == 4) // Return Request
{
document.getElementById("mySpan_" + direct_id).innerHTML = HttPRequest.responseText;
}
}
/*
HttPRequest.onreadystatechange = call function .... // Call other function
*/
}
var hexChars = "0123456789ABCDEF";
function Dec2Hex (Dec) {
var a = Dec % 16;
var b = (Dec - a)/16;
hex = "" + hexChars.charAt(b) + hexChars.charAt(a);
return hex;
}
function thai(s){
s2='';
for(var i=0;i<s.length;i++){
if(s.charCodeAt(i)>3423){
n=s.charCodeAt(i)-3424;
s2+='%'+Dec2Hex(n);
}else s2+=s.charAt(i);
}
return s2
}
//-->
</script>
ส่วนของ textbox
Code
<div id="Note_1_<%=rs("direct_id")%>">
<input type="button" name="EditButton_<%=rs("direct_id")%>" value="ปิดงานไม่สำเร็จ" onclick="Note_2_<%=rs("direct_id")%>.style.display=''; Note_1_<%=rs("direct_id")%>.style.display='none'" />
<span id="mySpan_<%=rs("direct_id")%>">
<%
If rs("direct_n_finish_stat")<>"" Then
Response.Write rs("direct_n_finish_detail")
End If
%>
</span>
</div>
<div id="Note_2_<%=rs("direct_id")%>" style="display:none">
<input type="button" name="UpdateButton_<%=rs("direct_id")%>" value="บันทึก" onclick="EditButton_<%=rs("direct_id")%>.style.display='none'; Note_1_<%=rs("direct_id")%>.style.display=''; Note_2_<%=rs("direct_id")%>.style.display='none'; JavaScript:doCallAjax('<%=rs("direct_id")%>');" />
<input type="button" name="CancelButton_<%=rs("direct_id")%>" value="ยกเลิก" onclick="Note_1_<%=rs("direct_id")%>.style.display=''; Note_2_<%=rs("direct_id")%>.style.display='none'" />
<input type="text" name="Direct_detail_<%=rs("direct_id")%>" style="width:98%" />
</div>
หน้าที่บันทึกค่า
Code
<%
Response.Charset = "windows-874"
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
Set Conn=Server.CreateObject ("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath ("Database1/direct_sale.mdb")
Direct_ID=Request.Form("Direct_ID")
Direct_n_finish_detail=Request.Form("Direct_n_finish_detail")
direct_n_finish_date=Year(Date)+543&"/"&right("00" & Month(Date),2)&"/"&right("00" & Day(Date),2)
Sql="SELECT direct_n_finish_stat,direct_n_finish_detail,direct_n_finish_date FROM direct_detail WHERE direct_id="&Direct_ID
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open Sql, Conn, 1,3
If rs.Recordcount<>0 Then
rs("direct_n_finish_stat")="1"
rs("direct_n_finish_detail")=Direct_n_finish_detail
rs("direct_n_finish_date")=direct_n_finish_date
rs.Update
direct_n_finish_stat=rs("direct_n_finish_stat")
rs.Close
End If
If direct_n_finish_stat<>"" Then
Response.Write Direct_n_finish_detail
End If
%>
Tag : ASP, JavaScript, Ajax
Date :
2011-12-15 11:11:04
By :
karn4851
View :
1538
Reply :
5
Code (JavaScript)
eval("var Direct_n_finish_detail= document.getElementById('Direct_detail_"+direct_id+"').value");
var pmeters = 'Direct_n_finish_detail=' + Direct_n_finish_detail + '&Direct_ID='+direct_id;
Date :
2011-12-15 11:25:14
By :
ikikkok
ตอนบันทึกค่า ขึ้น error msg แบบนี้ครับ
Message: Object required
Line: 46
Char: 4
Code: 0
URI: http://localhost/anc52test/report_direct_sale_show_n_finish.asp
Date :
2011-12-15 12:26:53
By :
karn4851
คือถ้าใช้ eval เพื่อรวม string ให้เป็น document.getElementById('Direct_detail_2').value พอกดปุ่ม บันทึก เพื่อส่งค่าไปหน้าบันทึก มันจะไม่ไป และขึ้น error ว่า
Message: Object required
Line: 46
Char: 4
Code: 0
URI: http://localhost/anc52test/report_direct_sale_show_n_finish.asp
แต่ถ้าใช้แบบผม แล้วกดบันทึก มันส่งค่าไปหน้า บันทึก ได้ครับ แต่เฉพาะ textbox name"Direct_detail_<%=rs("direct_id")%>" (ก็คือ Direct_detail_2) จะมีค่าเป็น nullundefined
var pmeters = 'Direct_n_finish_detail=' + document.getElementById('Direct_detail_')+direct_id.value + '&Direct_ID='+direct_id;
แก้หลายวิธีแล้วครับ ยังไม่ได้เลย
Date :
2011-12-15 13:49:02
By :
karn4851
ตอนนี้แก้ปัญหาได้แล้วครับ โดยเอา Form มาครอบส่วนของที่มี Textbox เอาไว้ครับ แล้วตรง Function doCallAjax เปลี่ยนดังนี้ครับ
ของเก่า
var pmeters = 'Direct_n_finish_detail=' + document.getElementById('Direct_detail_')+direct_id.value + '&Direct_ID='+direct_id;
ของใหม่ (มีตัวแปร พ่วงอีกนิดหน่อย)
var Direct_n_finish_detail1=eval("document.frm_n_finish.Direct_detail_"+direct_id+".value")
var finish_ck_1=eval("document.frm_n_finish.finish_ck_"+direct_id+".value")
var direct_finish_date1=eval("document.frm_n_finish.direct_finish_date_"+direct_id+".value")
var pmeters = 'direct_finish_date=' +thai(direct_finish_date1)+ '&finish_ck=' +finish_ck_1+ '&Direct_n_finish_detail=' + thai(Direct_n_finish_detail1) + '&Direct_ID='+direct_id;
สุดท้ายก็ขอขอบคุณคำแนะนำของคุณ PlaKriM ด้วยนะครับผม
Date :
2011-12-15 17:07:05
By :
karn4851
ผมก็ตอบมั่วๆ ไปครับ เผื่อถูก
Date :
2011-12-15 17:29:45
By :
ikikkok
Load balance : Server 05