ใช้ javascript อ่านค่าไฟล์ xml แล้วมีปัญหาเรื่อง Cross Domain ครับ

เริ่มโดย meemie989, 19 พฤษภาคม 2009, 23:21:51

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

meemie989

ช่วยทีครับ คือผมใช้ javascript ในการอ่านไฟล์ xml ที่อยู่ต่าง Domain กันนะครับ

แต่เมื่อเอา Code มาไว้ใน Domain เดียวกับไฟล์ xml ก็สามารถอ่านได้
แต่พอเอาไปไว้ต่าง Domain มันจะฟ้องว่า Access to restricted URI denied

ไม่ทราบว่าจะมีวิธีแก้ไขปัญหาดังกล่าวมั้ยครับ


ขอบคุณล่วงหน้าครับ

ลิงค์ด้านล่างนี้ เป็นวิธีอ่านค่าจากไฟล์ xml โดยใช้ javascript ครับ
http://www.d-looks.com/showblog.php?Bid=6069

ball6847

ตั้งแต่หัดเขียน javascript มายังไม่เคยหัดอ่าน xml ด้วย javascript เลยคับ ขอบคุณมากค้าบบ

ปล. ปกติถ้าจำเป็นต้องใช้งาน cross domain ผมจะใช้ JSON อ่ะ แต่ที่เลือกใช้เพราะเป็นแต่ JSON นี่แหละ  :-X
We use Ubuntu.

[direct=http://ng-seo.sourcelab.xyz/]AngularJS SEO Experimental[/direct]

meemie989

อ้างถึงจาก: ball6847 ใน 19 พฤษภาคม 2009, 23:52:01
ตั้งแต่หัดเขียน javascript มายังไม่เคยหัดอ่าน xml ด้วย javascript เลยคับ ขอบคุณมากค้าบบ

ปล. ปกติถ้าจำเป็นต้องใช้งาน cross domain ผมจะใช้ JSON อ่ะ แต่ที่เลือกใช้เพราะเป็นแต่ JSON นี่แหละ  :-X

ขอบคุณมากนะครับ

ช่วยแนะนำ แหล่งศึกษา JSON และวิธีการ cross domain ที่คุณว่าหน่อยได้มั้ยครับ

คือผมยังไม่เคย แตะ JSON เลยอะครับ   :P :P :P

Tee++;

No way!

Cross Domian ที่ทำงาน Request ข้ามไซด์ ได้มี อย่างเดียวคือ JSONP ซึ่ง define method เตรียมไว้ให้

ส่วน xml ต้องทำแบบนี้

#File: local-domain/proxy.php
<?php
header
('Content-type: application/xml');

$daurl "http://......xml";

$handle fopen($daurl"r");

if (
$handle) {
    while (!
feof($handle)) {
        
$buffer fgets($handle4096);
        echo 
$buffer;
    }
    
fclose($handle);
}
?>


แล้ว ค่อยเรียก ไฟล์เราแทน

แหล่งข้อมูลเพิ่มเติม อิอิ ^^
http://www.jquerytips.com/2008/07/20/how-to-use-xpath/
http://www.jquerytips.com/2008/04/26/ajax-cross-domain/
http://www.jquerytips.com/2007/11/22/jquery-xml/
http://www.jquerytips.com/2008/10/12/api-jsonp/
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


peglui

ก่อนอื่น ขอ บวก ให้ คุณ ball6847  กับคุณ Tee++ ก่อนเลย  :)


กำลังสนใจ JSON อยู่เหมือนกันฮะ ไม่รู้ว่าจะหา Study case หรือว่าอะไรเพื่อเริ่มดี = = งานเร่งซะด้วยสิ  :-* :-* :-*

meemie989

ขอบคุณมากครับ คุณ Tee++

ผมคงต้องเริ่มศึกษา JSON แล้วละ
ใครมีแหล่งความรู้เกี่ยวกับ JSON ช่วยโพสบอกทีนะครับ ขอบคุณมากๆครับ

ปล.ผมกำลังทำโปรเจค OpenSocial คือจะทำ App ที่ต้องเรียกใช้บริการจาก Webservice แบบ REST อะครับ

gotdwata

รู้สึกว่า browser มันจะไม่ยอมให้เราอ่านไฟล์ xml ข้าม server ครับ

วิธีแก้คือ ให้ใช้วิธีอ่านไฟล์ผ่านเว็บของเราเอง

ที่ผมเคยทำเขียนประมาณนี้ คือเขียน javascript อ่านผ่านไฟล์ php ของเว็บเรา


header('Content-type: text/xml');

$abcd=$_GET['abcd'];

ใส่เงื่อนไข $abcd ได้ $url ปลายทางที่เราจะไปดูดออกมา

ini_set('user_agent', 'Firefox/3.0.5');
$xml=file_get_contents($url);
echo $xml;


ลองดูนะครับ

**เพิ่มเติม**
$url ที่ใส่ต้องเป็นหน้าที่กด view source แล้วเป็น xml นะครับ
[direct=http://www.mrsbussa.com]เครื่องประดับเกาหลี[/direct] [direct=http://www.mrsbussa.com/accessories/earrings]ต่างหู ตุ้มหู[/direct] [direct=http://www.mrsbussa.com/accessories/bracelets]กำไล สร้อยข้อมือ[/direct] [direct=http://www.mrsbussa.com/accessories/rings]แหวน[/direct]
[direct=http://www.mrsbussa.com/accessories/key-chains]พวงกุญแจ[/direct]

Tee++;

ลองดูครับ ว่า web service ที่จะเชื่อมเข้าไป มี protocol jsonp ?

เพราะดูจากงานที่จะทำแล้ว ไม่ใช้การอ่าน xml จาก server side script แต่ใช้ client แทน น่าจะทำ app แบบ RIA แหงๆ ถ้าใช้ JSONP จะทำงานรอบเดียว และลด การทำงานจาก server แถม แก้ปัญหาเรื่อง rate limit ได้อีก เพราะใช้ IP ของ Client เป็นคน request เข้าไป

แต่อาจจะมีข้อเสียคือเรื่อง SEO นี่ล่ะ

เพิ่มเติมเผือมีประโยชน์
Ajax Cross domain with ACD (cgi)
http://www.ajax-cross-domain.com/#Examples
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]