AJAX相对于脚本获取url

时间:2011-11-29 11:19:34

标签: javascript ajax

如何形成open()调用的url部分,以便在不事先知道用户上传脚本的位置的情况下在正确的文件夹中查找脚本? 例如,假设我们有一个名为ajax.js的javascript文件和一个名为script.php的php脚本。我们这样调用open():

open("GET", "<path>/script.php", true);

同样有人说,ajax.js和script.php已被上传到http://somedomain.com/scripts/ajax,导入ajax.js的html文档的网址为http://somedomain.com/news/index.html。 很容易说

open("GET", "script.php", true);

因为script.php与ajax.js位于同一目录中,但该路径是相对于导入ajax.js的文档,因此浏览器会查找/somedomain.com/news/script.php。

我需要能够构建正确的url,而无需确切地知道ajax脚本的上传位置,以便于安装,而无需每次都更改url。 我该怎么做?

1 个答案:

答案 0 :(得分:0)

需要注意的一些事项......

1。)如果直接转到脚本的URL并检查媒体类型/ mime是text / javascript吗?如果不是,某些浏览器可能无法在文件中执行任何脚本,无论是否所有脚本都写得完美。

2。)您可以使用以下.htaccess命令在JavaScript文件中使用JavaScript扩展(例如example.js)执行PHP代码...

AddHandler application/x-httpd-php .js .example2 .example3
AddType text/javascript .js

如果您尝试使用动态路径(这是值得称道的),您不能将对象放在引号内,否则它将被视为字符串而不是对象。

var path = 'http://localhost/site1/';
alert(path+'scripts/example.js');

3.)尝试仅将脚本包含在scripts目录中,并且只包含head元素内的脚本文件。这将迫使您编写更好的JavaScript。对于那些抱怨在内容使用defer属性后加载脚本的人......

<head>
<script defer="defer" src="scripts/index.js" type="text/javascript"></script>
<script defer="defer" src="scripts/onload.js" type="text/javascript"></script>
</head>

4.。)在两个文件index.js和onload.js之间合并脚本。 onload.js文件应该只包含一个匿名的onload函数和全局变量(不在任何函数类型中的变量)......

var global_var = 'use these sparingly';
var path = 'http://localhost/'<?php echo 'something/'; /* dynamically make this work on localhost and example.com, use print_r($_SERVER); to get started */ ?>';

window.onload = function()
{
 function_1('parameter_1','parameter_2');
 function_2('parameter_1','parameter_2');
}

5.。)你可以分别保存多个.js文件,并使用PHP将它们合并到一个index.js文件中,这样它仍然可以很容易地使用。如果您需要一个非常有用的工具,我强烈建议您使用“高级查找和替换”在工作中快速查找和替换脚本。

6。)使用JavaScript的单引号和(X)HTML的双引号。一如既往地进行编码是一种非常有价值的做法,一旦你顺利完成就能获得回报。

7.)我强烈建议使用PHP动态使用$ _SERVER变量来帮助您在JavaScript中设置var路径,以便完全相同的代码在localhost和您的实时域(例如example.com)上都能正常工作不得不修改任何东西。一个称职的程序员总是会在将它们提交到实时环境之前在实践中测试它们,否则很容易让访问者感到烦恼,因为即使是简单的问题也会因为缓存文件和浏览器不会放弃等问题而滚雪球坏副本。

8。)因为你使用PHP棒使用单引号,除非你真的需要使用双引号。如果你不知道差异......

$e = 'aaa';
echo '123$e';//outouts 123$3
echo "123$e";//outouts 123aaa

9。)你可以使用alert(typeof object);确定对象的上下文(例如,对象(数组在JavaScript中称为对象),字符串,整数(数字)等。

10.)永远不要对函数名或变量名使用简单的术语(例如var open ='';或function open(){})。 JavaScript中有保留名称并使用它们会导致您在某些浏览器中拔出所有头发,而这些浏览器并不告诉您脚本无法运行的原因(并且不会触发任何错误或警告),例如IE浏览器。尝试使用良好的命名方案,例如函数ajax_upload(),var option_this,var option_that等.SuperEdi等编辑器有一个函数面板,因此您可以对AJAX函数进行分组并按名称对它们进行排序(例如ajax_1_init,ajax_2_build,ajax_3_request, ajax_4_handler,ajax_5_etc)。

希望这有帮助。