3

JavaScriptでAJAXリクエストを行う場合、書く必要がある場合はありますか?

window.location.protocol + '//' + window.location.host

単にではなく

/

結局のところ、画像、スクリプト、cssなどのファイルは常に相対的に指定されるため、ajaxリクエストを行う場合は同じである必要があります。

私がこれを求めている理由は、それを行う方法についての公式の提案(たとえば、w3cから)が見つからないためです。

4

3 に答える 3

5

window.location.protocol + '//' + window.location.hostルートディレクトリを示す末尾のスラッシュがないため、これらは厳密には同じではありません。しかし、すべての意図と目的のために、それらは交換可能に使用することができます。

実際の使用では、を使用していないと仮定する<base>と、次のすべてが同じ場所を指します。

window.location.protocol + '//' + window.location.host + '/'
window.location.href
'//' + window.location.host + '/'  //useful if you don't know the scheme and don't want to check
'/'

window.location.host80以外の場合はポート番号が含まれているので、それを含めることを心配する必要はありません。'/'常に「このページの元となったサーバーのルートディレクトリ」を意味するため、記述はより簡単で明確です。URIに次のようなものが含まれていると、事態が悪化する可能性があります。JSusername:password@を使用してそのデータを取得する方法がわかりません。個々のコンポーネントからURIを再構築しようとすると、コードがそのような異常な環境に移行された場合に問題が発生する可能性があります。

これらすべての正式な定義はRFC3986にありますが、これは正確に読みやすいものではありません。

于 2012-10-02T12:13:15.960 に答える
1

違いは1つだけです<base />。HTMLドキュメントにタグがある場合、AJAX(少なくともjQueryはそうします)はこのタグを考慮してURLを変更するようです。

それ以外の場合、2つは同じように動作する必要があります。そして、とにかく避けるべき<base>です。

<head>
    <title>untitled</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <base href="http://example.com/foo/" />
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <script>$.get("/bar");</script>
</head>

<body>
    <a href="#">Base test</a>
</body>

</html>
于 2012-10-02T12:18:33.693 に答える
0

まったく同じ意味だと確信していますが、正直なところ、を使用することをお勧めし/ます。Object->Object->string + string + Object->Object->scriptそれが理にかなっているのではなく、生の文字列だからです。

于 2012-10-02T11:38:29.140 に答える