# زبان های اسکریپتی > JavaScript و Framework های مبتنی بر آن > jQuery >  مشکل JQuery با Ip سایت

## cemohsen

با سلام
من توی یک پروژه تا این لحظه تا جایی که شده از توابع JQuery استفاده کردم
اما به مشکلی برخوردم که همه چیز رو تحت تاثیر خودش قرار داده و اونم از این قراره که
وقتی در قسمت URL به جای آدرس سایت ، IP سایت رو می زنم دیگه خیلی از توابع مخصوصا توابع AJAX  در JQuery کار نمی کنند ؟؟؟؟!!!!


توی فروم جستجو کردم اما چیزی چیدا نکردم و به خاطر همین پست جدید دادم

کسی راه حلی سراغ داره ؟
کسی قبلا به این مشکل خورده ؟

----------


## mehdi.mousavi

> با سلام وقتی در قسمت URL به جای آدرس سایت ، IP سایت رو می زنم دیگه خیلی از توابع مخصوصا توابع AJAX  در JQuery کار نمی کنند


سلام.
از اونجاییکه XMLHttpRequest نمیتونه Cross-Domain عمل کنه، در نتیجه باید درخواستها به همون Domain ای ارسال بشه که صفحه در وهله اول از طریق اون Load شده.

بطور مثال اگر من به http://www.barnamenevis.org دسترسی پیدا میکنم، دیگه نمیتونم یه XMLHttpRequest به https://barnamenevis.org بفرستم، چون چنین درخواستی Cross-Domain تلقی میشه. دقت کنید که وقتی شما سایت رو دارید با IP آدرس می کنید و سپس درخواستهای Ajax رو به URL ای که با Domain Name تعیین شده ارسال می کنید، بازهم این اتفاق خواهد افتاد.

در نتیجه، هنگامیکه از Ajax استفاده می کنید، مطمئن بشید که درخواستها رو به URL هایی که بصورت Relative ذکر شده اند، ارسال کنید! بدین ترتیب، اگر کاربر با http://www.barnamenevis.org به صفحه شما دسترسی پیدا کنه و شما درخواست Ajax رو به /services/getusers.aspx ارسال کنید (بطور نمونه)، چون مسیر بصورت Relative تعیین شده، بازهم اگر با IP صفحه شما آدرس بشه، مشکلی پیش نخواهد اومد، چون اون مسیر Relative بر اساس URL ای که بصورت IP-Based ذکر شده تفسیر میشه. بنابراین، مسیرها رو در کدهای JavaScript خودتون بصورت Relative ذکر کنید تا مشکل رفع بشه.

در نهایت، اگر مجبور به دسترسی Cross-Domain هستید، می تونید از JSONP استفاده کنید که قبلا یکی دو بار در موردش در همین بخش توضیح داده ام.

موفق باشید.

----------


## cemohsen

با تشکر از پاسخ شما
من منظوزتون رو خوب متوجه نشدم!
من دقیقا باید چی کار کنم ؟
من اینم بگم که وقتی از ابتدا هم با IP سایت رو باز می کنم هم به مشکل می خورم!

----------


## mehdi.mousavi

> با تشکر از پاسخ شما من منظوزتون رو خوب متوجه نشدم!
> من دقیقا باید چی کار کنم ؟ من اینم بگم که وقتی از ابتدا هم با IP سایت رو باز می کنم هم به مشکل می خورم!


سلام.
لطفا اون بخش از کد JavaScript رو که کار نمیکنه اینجا قرار بدید تا ببینم حدسم درست بوده یا خیر و براتون توضیح بدم که چطور مشکل رو رفع کنید.

موفق باشید.

----------


## cemohsen

با سلام
این کد مورد نطر من است
function bindUserPoints(arg) {
            $.ajax({
                type: "POST",
                url: "<%=WebSite.Url.MainService %>GetAllUserPoints",
                data: "",
                error: function(error) {
                    alert(error.responseText);
                },
                success: function(content) {

                    var returnVal = (content.text == undefined) ? content.lastChild.textContent : content.text;
                    if (returnVal == "ERR") {
                        showMessage("خطا در بارگزاري اطلاعات", "Error", "4000", '<%=WebSite.Url.Image %>' + "Error.gif", false);
                    }
                    else {
                        $('.divItems').html(returnVal);
                    }
                }
            });
        }

WebSite.Url.MainService آدرس صفحه سرویس است که در کد با استفاده از متدهای request.uri ادرس سایت را خوانده و بر می گرداند

مقدار بازگشتی سرویس هم کدهای htmlای است که باید در تگ div قرار بگیرد
که در زمانی که با IP وصل می شویم چیزی برنمی گرداند!!!!!
وب سرویس خود را هم در web.vonfig رجیستر کردیم.

----------


## mehdi.mousavi

> با سلام این کد مورد نطر من است آدرس صفحه سرویس است که در کد با استفاده از متدهای request.uri ادرس سایت را خوانده و بر می گرداند مقدار بازگشتی سرویس هم کدهای htmlای است که باید در تگ div قرار بگیرد که در زمانی که با IP وصل می شویم چیزی برنمی گرداند!!!!! وب سرویس خود را هم در web.vonfig رجیستر کردیم.


سلام.
مشکل کد شما دقیقا این خط هستش:

url: "<%=WebSite.Url.MainService %>GetAllUserPoints",

شما، سمت سرور، مسیری که بر میگردونید رو Relative تعیین کنید، مشکل حل میشه. در حال حاضر احتمالا MainService شما داره به string ای اشاره میکنه که به این صورت هستش:

http://mydomain.com/whatever

در صورتیکه، باید به این اشاره کنه:

/whatever

به بیان دیگه، مسیری که WebSite.Url.MainService داره از سمت Server برمیگردونه رو Relative تعیین کنید، نه Absolute تا مشکل رفع بشه.

موفق باشید.

----------


## cemohsen

> سلام.
> 
> به بیان دیگه، مسیری که WebSite.Url.MainService داره از سمت Server برمیگردونه رو Relative تعیین کنید، نه Absolute تا مشکل رفع بشه.
> 
> موفق باشید.


با تشکر
حق با شما بود ، من مشکلم رو به صورت زیر حل کردم

url: "http://" + location.host + "/webservices/mainservice.asmx/GetAllUserPoints",

----------


## mehdi.mousavi

> با تشکر حق با شما بود ، من مشکلم رو به صورت زیر حل کردم
> url: "http://" + location.host + "/webservices/mainservice.asmx/GetAllUserPoints",


سلام.
واقعیتش متوجه نمیشم چه اصراری به دادن مسیر بصورت Absolute دارید. چرا جای کد فوق از این کد استفاده نمی کنید؟

url: "/webservices/mainservice.asmx/GetAllUserPoints",

موفق باشید.

*پاورقی:* در هر حال، خوشحالم که مشکل رفع شد.

----------


## cemohsen

> سلام.
> واقعیتش متوجه نمیشم چه اصراری به دادن مسیر بصورت Absolute دارید. چرا جای کد فوق از این کد استفاده نمی کنید؟
> 
> url: "/webservices/mainservice.asmx/GetAllUserPoints",
> 
> موفق باشید.
> 
> *پاورقی:* در هر حال، خوشحالم که مشکل رفع شد.


به خاطر اینکه جایی که من دارم ازش متدهای سرویس رو صدا می زنم به صورت تودرتو در پوشه های دیگه ای قرار داره که من باید به عقب برگردم و مثلا  اونها رو به اینصورت صدا بزنم که

url: "../../webservices/mainservice.asmx/GetAllUserPoints",

اما اینطوری با دستور location.host از مسیر root مستقیما به جایی که می خوام می رم
در هر صورت بسیار ممنون از پاسخگویی شما

----------


## cybercoder

> از اونجاییکه XMLHttpRequest نمیتونه Cross-Domain عمل کنه، در نتیجه باید  درخواستها به همون Domain ای ارسال بشه که ...


با مرورگر کذائی مایکروسافت مشکلی نخواهد داشت زیرا به صورت Activex ... بنابراین به خود xmlhttp مربوط نمی شود بلکه یک سری policy وجود دارد که مرورگرهای *استاندارد* باید از آن تبعیت کنند.
http://en.wikipedia.org/wiki/Same_origin_policy




> ه خاطر اینکه جایی که من دارم ازش متدهای سرویس رو صدا می زنم به صورت  تودرتو در پوشه های دیگه ای قرار داره که من باید به عقب برگردم


یک مسیر را به عنوان پایه انتخاب و نسبت به آنجا سایر مسیرها را Initialize کنید.

موفق باشید.

----------


## cemohsen

> با مرورگر کذائی مایکروسافت مشکلی نخواهد داشت زیرا ....


با مرورگر مایکروسافت هم این مشکل وجود داشت!!!!!

----------

