استفاده از آدرس های خارجی

[right][font="Tahoma"]با سلام و خسته نباشید به همه دوستان

من تو یکی از پروژه هام قصد دارم یک سری داده جیسون رو از یک وبسایت دیگه ای بگیرم و به صورت ایجکس تو صفحه خودم استفاده کنم ولی جی کوری و تمامی عناصر ییی که از ایجکس استفاده میکنند اجازه این کار رو بهم نمیده.

دوستانی که در این زمینه اطلاعاتی دارند لطفا راهنمایی کنند.

[/font][/right]

[font=“Tahoma”][right]کسی نبود که قبلا از این استفاده کرده باشه؟؟؟؟ ??? [/right][/font]

[rtl]

[right][font="Tahoma"]

درسته که Yii این امکان رو به صورت پیش فرض نداره اما jQuery که داره!

برای این کار راه حل های مختلفی وجود داره که توی همشون نکته اصلی استفاده از JSONP هست. ساده ترین راه حلش میتونه این باشه:

[/rtl]

[/font][/right] [font="Tahoma"]


$.getJSON("http://anothersite.com/something.php?callback=?", function(data){    alert(JSON.stringify(data)); });

[/font][right][font="Tahoma"][rtl]

توضیح بیشتر در مورد JSONP:

http://api.jquery.com/jQuery.ajax/

[/font][/rtl]

[/right]

[RTL]

منم توی جستجوهایی که داشتم به این نتیجه رسیدم که از JSONP استفاده کنم ولی تا جایی که فهمیدم یکی از Yahoo Apps ها هست که ازش نتونستم جواب بگیرم.

یعنی درخواست ارسال میشه ولی جوابی براش نمیاد!!!!

[/RTL]

[right][font="Tahoma"][rtl]

منظورتون رو از Yahoo apps درست متوجه نشدم تا اونجایی که من میدونم JSONP ربطی به Yahoo نداره و توسط تیم jQuery پیاده شده اما حالا اگر ایده اصلیش ماله Yahoo بوده دیگه نمیدونم!

کدی که استفاده می کنید چیه؟ هم کد jQuery شما و هم کد سمت سرور اون سایت که json رو میفرسته؟ تا کدها رو قرار ندید من نمیتونم کمک زیادی بهتون بکنم…[/font]

[/rtl]

[/right]

[RTL]دوست عزیز برای مثال من تو سایت زیر یک سری اطلاعات دارم و میخوام ازشون هم استفاده میکنم.

برای مثال من این دستور رو مینویسم ولی پاسخی نمیگیرم:

[/RTL]


$.getJSON("http://www.spzco.com/shop/admin/transactions/get_valid_product.php?callback=?", 

function(data){    

alert(JSON.stringify(data)); 

});

[font="Tahoma"][RTL]تو حالت عادی که اطلاعات به صورت JSON ‌ارسال میشه تو فایر باگ اطلاعات ارسالی رو نشون میده و پاسخی نیست ولی وقتی که به حالت JSONP‌ ارسال میشه دیگه هیچ چیزی حتی تو فایر باگ هم نشون نمیده[/RTL][/font]

[right][rtl][font="Tahoma"]

خروجی که این آدرس تولید میکنه اشتباهه یعنی JSON هست اما JSONP نیست! الان خروجی شما این شکلیه:

[/rtl]

[/font][left][font="Tahoma"]


{"usertype":"nothing","data":....}

[/font][/left][font="Tahoma"][rtl] در صورتی که درستش اینه:[/rtl]

[/font][left][font="Tahoma"]


jQuery2384794323232842({"usertype":"nothing","data":....});

[/font][right][font="Tahoma"][rtl][/font]

[/right][/left][font="Tahoma"]jQuery2384794323232842 یه تابع تصادفی هست که jQuery تولید میکنه و به عنوان یه query string (که همون callback هست) به اون سایت میفرسته بنابراین کد سمت سرور اون سایت ایراد داره و باید اونو اصلاح کنید تا خروجی JSON رو بذاره داخل اون تابع

[/font][/rtl]

[/right]

[font="Tahoma"][RTL]خب بالاخره جی کوری باید یک خروجی بگیره یا نه؟؟

این اصلا اون خروجی رو هم نمیگیره.

درضمن اون آدرس یک نمونه بود. من میخوام از یک سایتی که شبیه این داده هارو به صورت جیکوری برای یک گریدویو تو دات نت میفرسته رو بگیرم و تو سایت خودم نشون بدم. اینم بگم که دسترسی به سورس اون سایت هم ندارم.[/RTL][/font]

[right][font="Tahoma"][rtl]

این که شما نتیجه رو نمیبینید چند تا احتمال وجود داره:

۱- شاید قبل ازگرفتن خروجی شما باید توی اون سایت login بشین و username یا password یا token یا … همراه درخواست ارسال کنید در این صورت باید با اونا تماس بگیرید و راهنمایی بخواید

۲- شاید syntax خروجی اون سایت ایراد داشته باشه که در این صورت حتی اگر خروجی هم بده ج.ن jquery نمیتونه اونو parse کنه هیچی نشون نمیده و ارور میده (با firebug->console چک کنید) دراین صورت راه حل همونی هست که توی پست قبلیم گفتم

۳- اون سایت اصلا JSONP رو ساپورت نمیکنه!

۴- آدرس شما اشتباهه

۵- سایت اونا down شده

۶- ترکیبی از حالتهای بالا ;D

اون آدرس رو یه بار با خود browser باز کنید ببینید اصلا چیزی توی صفحه نمایش میده اگر داد اینجا بذارید

[/font][/rtl]

[/right]

[rtl]برای نمونه همون وب سایتی که بالا آدرسش رو توی دستور نوشته بودم رو اینجا قرار میدم[/rtl]

آدرس:

http://www.spzco.com/shop/admin/transactions/get_valid_product.php?callback=?

خروجی:


{"usertype":"nothing","data":[{"product_id":"11924","product_title":"\u0627\u0641 \u0627\u0645 \u0637\u0631\u062d \u0645\u0627\u0634\u064a\u0646 \u062d\u0633\u0627\u0628 \u0641\u0648\u0644\u062f\u0631\u064a","imaget":null,"single_price":"17000","score":"160","stock":"10","visit":"0"},{"product_id":"11923","product_title":"\u06a9\u0627\u0631\u062a \u0627\u064a\u0646\u062a\u0631\u0646\u0627\u0644 \u0635\u062f\u0627 H.B","imaget":null,"single_price":"22000","score":"203","stock":"10","visit":"0"},{"product_id":"11922","product_title":"\u06af\u064a\u0645 \u067e\u062f \u0641\u0631\u0645\u0627\u0646\u064a","imaget":null,"single_price":"20500","score":"186","stock":"10","visit":"0"},{"product_id":"11921","product_title":"\u06af\u064a\u0645 \u067e\u062f \u0641\u0631\u0645\u0627\u0646\u064a","imaget":null,"single_price":"110000","score":"1010","stock":"1","visit":"0"},{"product_id":"11920","product_title":"\u0641\u064a\u0644\u062a\u0631 \u0627\u0644 \u0633\u064a \u062f\u064a 15 \u0644\u067e \u062a\u0627\u067e","imaget":null,"single_price":"5000","score":"43","stock":"10","visit":"0"},{"product_id":"11919","product_title":"\u0647\u0627\u0628 \u064a\u0648 \u0627\u0633 \u0628\u064a \u0631\u0646\u06af\u064a","imaget":null,"single_price":"9000","score":"77","stock":"10","visit":"0"},{"product_id":"11918","product_title":"\u0647\u0627\u0628 4 \u067e\u0648\u0631\u062a\u0647 \u06a9\u0627\u0628\u0644\u064a","imaget":null,"single_price":"7500","score":"66","stock":"10","visit":"0"},{"product_id":"11917","product_title":"\u0631\u0645 \u0631\u064a\u062f\u0631 \u0641\u064a\u0644\u064a\u067e\u0633","imaget":null,"single_price":"5000","score":"42","stock":"15","visit":"0"},{"product_id":"11915","product_title":"\u0641\u0646 \u0644\u067e \u062a\u0627\u067e \u062a\u0627\u0634\u0648 \u0641\u0627\u0646\u062a\u0632\u06cc","imaget":null,"single_price":"10500","score":"96","stock":"5","visit":"0"},{"product_id":"11914","product_title":"\u0641\u0646 \u0644\u067e \u062a\u0627\u067e \u062a\u0627\u0634\u0648","imaget":null,"single_price":"9500","score":"85","stock":"5","visit":"0"},{"product_id":"11913","product_title":"\u0647\u062f\u0633\u062a \u062a\u06a9 \u06af\u0648\u0634","imaget":null,"single_price":"12000","score":"110","stock":"5","visit":"0"},{"product_id":"11909","product_title":"\u0645\u0648\u0633 \u064a\u0648 \u0627\u0633 \u0628\u064a \u062c\u064a \u0648\u064a","imaget":"product_image\/11909t.jpg","single_price":"11500","score":"90","stock":"8","visit":"0"}],"pageInfo":{"totalRowNum":"301","pageNo":26}}

[RTL]قبول دارم این کد JSONP نیست ولی اصولا باید توی Console خطا رو ببینم دیگه!!! ولی هیچ چیزی رو نمیبینم.یعنی ممکنه که مرورگر ساپورت نکنه؟؟؟!!![/RTL]