PDA

View Full Version : load یک تگ از صفحه متعلق به یک سایت دیگر در صفحه خودمان



zoltrix
دوشنبه 14 دی 1388, 20:15 عصر
سلام دوستان
من میخوام اطلاعات یک تگ از یک وبسایت دیگه رو در صفحه خودم بارگذاری کنم
دوستان میتونن کمکم کنن.
توجه داشته باشن با این دوستور میشه اطلاعات یک تگ در صفحه دیگر دایرکتوری موجود
را بارگذاری کرد ولی زمانی که آدرس سایتی خارج از مسیر جاری داده شود
برنامه کار نمیکنه





$('#result').load("index.html #txt");
به این شکل کار میکنه اما زمانی که به عنوان مثال مینویسیم


$('#result').load("http://wwww.yahoo.com #d1");


کار نمیکنه
!!!!

امیـرحسین
سه شنبه 15 دی 1388, 11:27 صبح
توابع Ajax فقط به فایلهایی که داخل سرور هستند دسترسی دارند. برای این کار باید یه اسکریپت سرور-ساید بنویسید که اطلاعات رو از سایت خارجی بگیره و تابع Ajax رو بر اساس اسکریپت خودتون تنظیم کنید. مثلا
$.get("test.php", { go: "yahoo.com" }, function(data){ $('#result').html(data); });
<?php
// test.php
$context = stream_context_create(array( 'http'=> array('method'=>"GET") ));
return file_get_contents('http://'.$_GET['go'], false, $context);
?>



البته توسط frame و یه مقدار کدنویسی هم میشه این کار رو انجام داد. توسط jQuery یه فریم مخفی ایجاد می کنید به آدرسی که میخواید و توسط رویداد onload متوجه میشید که فریم کاملا لود شده حالا می تونید از اون اطلاعات فریم هر div یا node که خواستید رو بردارید و چاپ کنید. از نظر ظاهری کاملا مثل آژاکسه.
قبل از استانداردسازی object آژاکس(XMLHttpRequest)، حرفه ای ها از این روش استفاده می کردند....

mehdi.mousavi
سه شنبه 15 دی 1388, 11:55 صبح
البته توسط frame و یه مقدار کدنویسی هم میشه این کار رو انجام داد. توسط jQuery یه فریم مخفی ایجاد می کنید به آدرسی که میخواید و توسط رویداد onload متوجه میشید که فریم کاملا لود شده حالا می تونید از اون اطلاعات فریم هر div یا node که خواستید رو بردارید و چاپ کنید.

سلام.
از اونجاییکه Source این iframe هم جایی خارج از domain اصلی هستش، jQuery به شما اجازه دسترسی به content فریم رو نخواهد داد.

موفق باشید.

bahman_akbarzadeh
سه شنبه 15 دی 1388, 15:47 عصر
سلام
من تمام روش هاي موجود رو بررسي كردم و هيچ كدوم نتونستن جواب بدن.
iframe رو هم ميخواستم تست كنم كه ميگيد نميشه.
استفاده ايشون هم بصورتيه كه نميشه در كنار سايت اصلي، يك صفحه سرور سايد داشت.
الان فكري به نظرم رسيد. شايد بشه با يه تگ اسكريپت، كار رو راه انداخت.
مثل تگ آمار وبگذر، كه يك دايو برميگردونه.
پس تو يه سرور ديگه، يك صفحه سرور سايد مي نويسيم كه بياد بر اساس كوئري كه بهش داده ميشه، اطلاعات صفحه مورد نظر رو بصورت يك پروكسي لود كنه و با يه جستجوي ساده، محتواي تگ رو به سمت درخواست كننده تگ اسكريپت، بفرسته و اطلاعات، سر جاي خودشون قرار بگيرن.
نظر دوستان چيه؟
فكر كنم كار كنه ...

mehdi.mousavi
دوشنبه 21 دی 1388, 12:48 عصر
سلام الان فکری به نظرم رسید. شاید بشه با یه تگ اسکریپت، کار رو راه انداخت. تو یه سرور دیگه، یک صفحه سرور ساید می نویسیم که بیاد بر اساس کوئری که بهش داده میشه، اطلاعات صفحه مورد نظر رو بصورت یک پروکسی لود کنه و با یه جستجوی ساده، محتوای تگ رو به سمت درخواست کننده تگ اسکریپت، بفرسته و اطلاعات، سر جای خودشون قرار بگیرن. نظر دوستان چیه؟ فکر کنم کار کنه ...

سلام.
اگر این روشی که به ذهن شما رسیده رو اندکی تغییر بدیم، اسمش میشه JSONP یا JSON with Padding. ایده این روش Insert کردن یک Script Tag در HTML هستش، بگونه ای که داده ها، از سمت سرور بصورت JSON به Client ارسال میشن و سمت Client یک Callback پس از دریافت صحیح اطلاعات، فراخوانی میشه و شما میتونید توی این callback function هرکاری دلتون خواست با صفحه انجام بدید.

اما برای نوشتن صفحه Server-Side یا در واقع همون Web Service اگر از ASP.NET استفاده میکنید، قطعا به مشکلات متعددی برخواهید خورد. یکی از اونها، برگردونده شدن داده ها بصورت XML بجای JSON از سمت سرور هستش. علیرغم اینکه در Header درخواست، Content Type مورد نظر رو که JSON باشه، Set میکنید، بازهم اطلاعات بصورت XML به شما برگردونده میشه.... برای رفع این مشکل هم میشه از یک Http Module استفاده کرد...

در هر حال، خوندن این مقاله (http://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx) رو قبل از انجام هر کاری بهتون توصیه میکنم. حتما Comment (http://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx?msg=3328013#xx3328013xx) منو پایین این مقاله بخونید، چون بخشی از کد نوشته شده در مقاله ایراد داره که در Comment مزبور من بهش اشاره کرده ام....

موفق باشید.

eAmin
سه شنبه 22 دی 1388, 15:39 عصر
سلام.

از همون اوایل پیدایش Ajax بحث بر سر Cross domain Ajax بوده و هست!
روشی هم که دوستمون گفتند ( bahman_akbarzadeh ) هم مثل روشی هست که در این (http://www.ajax-cross-domain.com/) سایت هم از اون استفاده شده.
اخیرا در مرورگر IE8 این امکان بصورت Native گنجونده شده و شما می تونید با استفاده از شی جدید اضافه شده: XDomainRequest می تونید این عملیات رو پیاده سازی کنید. البته منوط به اینکه از قبل باید header ی رو بفرستید تا اجازه دسترسی به این امکان رو داشته باشید.
Header: Access-Control-Allow-Origin
همینطور در فایرفاکس از ورژن 3.0 به بعد، شما می تونید با استفاده از set کردن همین header و قرار دادن نام سایت مورد نظر به عنوان مقدار هدر مربوطه،با استفاده از همون شی XMLHttpRequest این امکان رو داشته باشید.
توضیجات بیشتر رو توصیه می کنم در مستندات خود مرورگرها مطالعه کنید:
http://msdn.microsoft.com/en-us/library/dd573303%28VS.85%29.aspx
https://developer.mozilla.org/En/HTTP_Access_Control

در ضمن می تونید از این اسکریپتها هم استفاده کنید:
JavaScript+Flash: http://flxhr.flensed.com/
http://www.ajax-cross-domain.com/
http://dev.mixendo.com/
jQuery&YQL: http://github.com/codepo8/crossdomain-ajax-with-jquery-and-yql

موفق باشید.