עברית ו xmlhttp

  • פותח הנושא iJoe
  • פורסם בתאריך

iJoe

New member
עברית ו xmlhttp

האם ניתן לשלוח מה client באמצעות אובייקט xmlhttp עברית לשרת? encoding לא פותר את הבעייה ולא הצלחתי למצוא פיתרון בשום מקום (אני מניח שיש פיתרון כי יש עוד כמה שפות שלא נתמכות כמו ערבית או אפילו סינית. תודה מראש עבור העזרה
 

icemano

New member
תאורתית לא אמורה להיות בעיה עם

שליחה ו/או קבלה של עיברית. יש רק לשים לב שהצד המקבל מסוגל לפרש נכונה את סוג ה encoding בו השתמש השולח. כדי לחסוך במילים תקרא את הדיון הקצר שנערך בנושא (לינק מצורף) ותשחק עם הדוגמא.
 

iJoe

New member
קראתי את ההודעות ניסיתי את הדוגמאות

נשמע כמו פתיח של טלנובלה :). אני אסביא את הבעייה בליווי קוד דוגמא: יש לי טופס קליטת נתונים: Dim sXmlString Dim ObjXmlDoc Dim xmlHttp set ObjXmlDoc = CreateObject("MSXML2.DOMDocument") sUnicode ="<?xml version=" & chr(34) & "1.0" & chr(34) &_ " encoding=" & chr(34) & "windows-1255" & chr(34) & "?>" sXmlString=sXmlString & "<Field>" & _ "<TestName>" & frmTest.xx.value & "</TestName></Field>" ObjXmlDoc.loadXML(sUnicode & sXmlString) set XmlHttp = CreateObject("MSXML2.XMLHTTP") xmlHttp.open "POST", "HttpAddTest.asp", false xmlHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded" xmlHttp.send(ObjXmlDoc) alert(right(xmlHttp.responseText,1000)) כמובן שיש לי גם דף על השרת שקולט את הנתונים וקורא ל stored procedure dim ObjXmlDoc Dim sXmlString Response.CharSet = "windows-1255" set ObjXmlDoc = Server.CreateObject("MSXML2.DOMDocument") ObjXmlDoc.load(Request) Response.Write ExecuteSP(ObjXmlDoc.xml,"AddNewTest_SP") אני מקבל הודעת שגיאה מהדטה בייס (משהו על זה שחסר רוט אלמנט) אם אני כותב את תוכן ה xml עלי ידי response.write ObjXmlDoc.xml אני מקבל סימני שאלה בעייה!
 

meronf

New member
אז תשרשר רוט אלמנט

כאשר מחזירים XML מ SP בדרך כלל חסר שורש מסמך אז פשוט תשרשר לפני ואחרי מה שחוזר מה DB
 

iJoe

New member
הודעת השגיאה היא רק סימפטום

אני שולח לדטה בייס עם רוט אלמנט,(בדוגמא הראיתי את הסטרינג). הבעייה היא שהדטה בייס לא מזהה את הכיתוב (charset) בגלל הסימני שאלה ולכן מציג הודעת שגיאה.
 

icemano

New member
טוב אז קודם כל

אנא ממך תצמיד את הקוד לשמאל כדי שגם הדיסלקטים וגם אלו שלא יוכלו לקרוא את הקוד
. נראה לי שאתה לא קובע את ה content-type הנכון בצד ה client. לפי דעתי זה אמור להיות משהו כזה:
xmlHttp.setRequestHeader "Content-type", "xml/text; Charset: windows-1255"​
אני חושב שה charset של ה content-type חייב להיות זהה ל encoding attribute שקבעת במסמך ה xml. הבררת מחדל היא utf-8 אם אני זוכר נכון. בנוסף רצוי לציין בדף ה asp שה content-type של ה response היא גם "text/xml" וזאת כדי שהאובייקט ה xmlhttp ב client אוטומטית יעשה parsing ויבנה את ה DOM (אם אתה רוצה כמובן).
 

iJoe

New member
ניסיתי ויש התקדמות..

שינית את ה xmlHttp.setRequestHeader ואכן כשאני שולח את המידע מהקליינט בצורה של "אבגד" = Addtest.asp?xx אני מסוגל לקבל ב("Request.QueryString("xx את המשתנה xx בעברית ולעשות לו loadxml לאובייקט, זה אפילו עובד מצויין. אבל אני עדיין לא מסוגל לעשות load לאובייקט בצד הקליינט, לשלוח את אותו אובייקט בפקודת ה send , ולבצע (ObjXmlDoc.load(Request בשרת ולקבל xml המכיל עברית ולא סימני שאלה. הסיבה שאינני רוצה להשתמש בהעברת דרך משתנה היא הגבלת המקום (עד 2200 תווים אם אינני טועה). אודה מאוד מאוד מאוד על דוגמא.
 

icemano

New member
הממ ..

מבולבל אנוכי מעט. בקוד הדוגמא שצרפת מקודם (ההוא שמוצמד לימין) אתה שולח את המידע מה client בתוך ה post body ולא כחלק מה url. ובצד השרת אתה מעביר את ה request למטודה load של אובייקט ה xml. ואילו עכשיו אתה התייחסת ל request.querystring ולשימוש במטודה loadxml. אני מציע לך לחזור שוב לאותו לינק שנתתי לך בתגובה הראשונה. שם לקראת סוף הדיון ישנו קובץ rar שהכנתי שמדגים מספר אפשרויות של שליחת עיברית מה client והחזרה של עיברית מה server. במיוחד שים לב לפונקיה xTest3 בקובץ z.htm (היא זאת ששולחת מסמך xml שמכיל עיברית ל server) ולקובץ z3.asp (אשר מקבל את המסמך שנשלח, עושה קצת עיבוד ומחזיר גם מסמך xml). בנוסף הינה דוגמא קטנה שממחישה את התהליך:
CLIENT SIDE: ---------------- // Sending an xml document (xmlDoc) to the server. var http = new ActiveXObject("Microsoft.XMLHTTP"); http.open("POST", "z3.asp", false); http.setRequestHeader("Content-Type", "xml/text; Charset=UTF-8"); http.send(xmlDoc); SERVER SIDE: ---------------- ´ Create the input document and fill it with the data from the client. dim docIn set docIn = CreateObject("Microsoft.XMLDOM") if not docIn.Load(Request) then ___´ Handle the error ___Response.End end if ´ Create the output document. dim docOut set docOut = CreateObject("Microsoft.XMLDOM") ´ Do some processing ...... ´ Send the output document to the client. Response.CharSet = "utf-8" Response.ContentType = "text/xml" docOut.save Response​
בהצלחה.
 

iJoe

New member
זהו, שגם אני הממ... ../images/Emo8.gif

קודם כל תודה על התגובות
שליחת הסטרינג דרך משתנה הייתה סתם ניסוי... כל רצוני הוא לשלוח אובייקט xml המכיל עברית, לקבל אותו בשרת לתוך אובייקט xml ולהדפיס את התוצאה על המסך בלי לראות סימני שאלה במקום עברית.
 

iJoe

New member
Unfortunately No :(

פתחתי תקלה במיקרוסופט, ופניתי למרצה מהכנס האחרון של מיקרוסופט, אולי זה יזיז משהו... שוב תודה!
 

icemano

New member
מוזר ..

אתה רוצה לאמור שהדוגמאות שצרפתי (בשרשור הזה ובאותו לינק מהפורום אחר) לא עבדו בשבילך? במו ידי תקתקתי את הקוד. במו עיני בדקתי את התוצאות. בנוסף אני זוכר שאותה טכניקה עבדה כבר לפני כשנה-וחצי/שנתיים.
 

iJoe

New member
הדוגמאות עבדו

הצלחתי לשלוח את משתנה ע"י שרשור עם האופרטור "?" הצלחתי גם לקבל עברית ע"י כתיבה בצד השרת שך עברית ו alert בצד הלקוח. לא הצלחתי לשלוח סטרינג בצורה של xml ולקלוט אותו ע"י טעינה של אובייקט ה request לתוך אובייקט xmldom. כמו כן לא הצלחתי לשלוח אובייקט xml המכיל עברית ולקלוט אותו ע"י טעינה של אובייקט ה request לתוך אובייקט xmldom. הסיבה שאינני רוצה לשתמש ב שרשור היא מגבלת המקום. as always תודה רבה עבור העזרה
 
למעלה