2011-02-23 11 views
14

ठीक है, मैं निम्नलिखित कार्यों के साथ एक जावास्क्रिप्ट फ़ाइल है:जावास्क्रिप्ट अजाक्स में सापेक्ष पथ समस्याएं फोन

function AskReason() { 
    var answer = prompt("Please enter a reason for this action:", ""); 
    if (answer != null) 
     DoReason(answer); 
} 

function createXMLHttpRequest() { 
    try { 
     return new XMLHttpRequest(); 
    } 
    catch (e) 
    { alert('XMLHttpRequest not working'); } 
    try { 
     return new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (e) 
    { alert('Msxml2.XMLHTT not working'); } 
    try { 
     return new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    catch (e) 
    { alert('Microsoft.XMLHTTP not working'); } 
    alert("XMLHttpRequest not supported"); 
    return null; 
} 

function DoReason(reason) { 
    var xmlHttpReq = createXMLHttpRequest(); 
    var url = "/Shared/AskReason.ashx?REASON=" + reason; 
    xmlHttpReq.open("GET", url, true); 
    xmlHttpReq.send(null); 
} 

यह पंक्ति:

var url = "/Shared/AskReason.ashx?REASON=" + reason; 

क्या समस्या का कारण है है।

वीएस 2010 में ऐप डिबगिंग - यह कॉल मेरे एशक्स हैंडलर पर काम करता है।

जब मैं एक वर्चुअल निर्देशिका के लिए परियोजना को स्थानांतरित - उदाहरण के http://localhost/myapp

इस कोड को तोड़ देगा और मैं इस के लिए जावास्क्रिप्ट बदलना होगा:

var url = "http://localhost/myapp/Shared/AskReason.ashx?REASON=" + reason;

मैं कैसे ठीक कर सकते हैं पर कोई भी विचार जब मैं सर्वर पर ऐप्स को तैनात करता हूं तो यह दोनों वातावरण में काम करने के लिए या मैन्युअल परिवर्तन को स्वीकार करता है?

धन्यवाद, माइक

+1

नहीं ठीक है, मैं एक मिनट में गौर करेंगे - लेकिन यह एक बहुत बुरा विचार [दूसरों के बीच में सुरक्षा कारणों के लिए] अपने स्वयं के AJAX विधि रोल करने के लिए है - कृपया प्रोटोटाइप या jQuery की तरह एक पुस्तकालय को देखो। या फिर जब से तुम नेट का उपयोग कर रहे - पुस्तकालयों में बनाया का उपयोग (जो प्रभावी रूप से jQuery) – iivel

उत्तर

18

Pointy's way काम करता है, लेकिन आपको पहले से ही पता होना चाहिए कि आप इसे तैनात करने जा रहे हैं।

वैकल्पिक रूप से, बस एक / साथ रिश्तेदार पथ शुरू नहीं है:

var url = "Shared/AskReason.ashx?REASON=" + reason; 

कि वर्तमान दस्तावेज़ के स्थान के सापेक्ष का समाधान हो जाएगा। तो अगर वर्तमान दस्तावेज़ है:

http://localhost/myapp/index.aspx 

... तो यह है कि

http://localhost/myapp/Shared/AskReason.ashx?REASON=foo 
+0

यह मेरे लिए काम नहीं करता है क्योंकि वर्तमान पृष्ठ जे एस बुला एक उप फ़ोल्डर में है ... लेकिन सब कुछ एक ही में किया गया था, तो फ़ोल्डर यह काम करेगा! – MDV2000

+5

@ एमडीवी 2000: आप अभी भी अपनी संरचना में सापेक्ष पथ का उपयोग कर सकते हैं। उदाहरण के लिए, यदि स्रोत 'http: // localhost/myapp/subfolder/index.aspx' है, तो आप' http/ // localhost/myapp/Shared/प्राप्त करने के लिए '../ Shared/AskReason.ashx' का उपयोग कर सकते हैं। AskReason.ashx'। एकाधिक '../../' ठीक भी हैं। मैं "रूट" की बजाय ऐप रिश्तेदार के भीतर सभी पथ रखने की सलाह देता हूं। –

+0

मुझे वास्तव में एक और तरीका मिला। मेरे एएसपी.नेट कोड में, मैंने अपने जेएस विधि में बटन का ऑनक्लिएंट क्लिक किया है। मैंने विधि में एक पैरामेट जोड़ा और सर्वर यूआरएल + वर्चुअल डायरेक्टरी नेम पास किया और इसलिए जेएस कोड में मैं बस जिस पथ को चाहता हूं उसे प्राप्त करने के लिए यूआरएल पर पैरामेट मान को जोड़ता हूं। – MDV2000

5

पथ है कि एक "/" (और कोई प्रोटोकॉल & मेजबान) के साथ शुरू मेजबान के जड़ के सापेक्ष हैं। यदि आप इस तरह तैनात करते हैं कि आपका एप्लिकेशन "http: // जो भी/myapp" पर है, तो आपके रूट-रिश्तेदार पथ को "/ myapp" से शुरू करना होगा।

जब आप किसी सर्वर-साइड वातावरण में काम कर रहे हैं जिसमें किसी प्रकार का पेज टेम्पलेट तंत्र शामिल है, तो एक सामान्य चाल यह है कि पथ का वह हिस्सा किसी प्रकार का कॉन्फ़िगरेशन चर हो ताकि आप पथ जैसे पृष्ठों को लिख सकें :

<a href='${root}/something/something'>click me</a> 

तब "रूट" चर को "/ myapp" या जो कुछ भी कॉन्फ़िगरेशन के आधार पर विस्तारित किया गया है।

2

यूआरएल को हल होगा

 
var url = "/Shared/AskReason.ashx?REASON=" + reason; 

रूट निर्देशिका में फाइल की तलाश कर रहे हैं [यह बाद से एक पूर्ण पथ है], प्रभावी रूप से

 
http://localhost/Shared/AskReason.ashx 

आपको वर्चुअल निर्देशिका का नाम शामिल करना चाहिए या उचित संरचना निर्धारित करना चाहिए:

बिना किसी रिश्तेदार पथ के आपको शुरू करना/आपको एक सापेक्ष पथ देगा ... यदि आपको निर्देशिकाओं का उपयोग करने की आवश्यकता है ../ साझा/नोटेशन की शैली, या अंत में अपने वर्तमान पथ का निर्धारण करने के लिए अपने सर्वर निर्देशिका कमांड का उपयोग करें।

+0

मैंने पथ में वर्चुअल जोड़ा - और यह अभी भी काम नहीं कर रहा है .. हमम .... – MDV2000

2

मैं एक ऐसी ही समस्या है, जहां एक पूर्ण यूआरएल की जरूरत थी लेकिन संदर्भ टूट गया जब स्थानीय होस्ट से उत्पादन सर्वर के लिए जा रहा। एक "स्थानीय होस्ट" स्ट्रिंग में मौजूद रहने पर मैं जाँच करके इसका समाधान नहीं:

var environ = window.location.host; 

तो आप बस कर सकते हैं:

if (environ === "localhost") { 
    var baseurl = window.location.protocol + "//" + window.location.host + "/" + "shared/"; 
} else { 
    var baseurl = window.location.protocol + "//" + window.location.host + "/"; 
} 

तो फिर तुम जो कुछ भी यूआरएल आप संदर्भ के लिए की जरूरत के सामने baseurl जोड़ सकते हैं।

संबंधित मुद्दे