在给定的php脚本中,我有以下内容:
<script>
function showMember() {
return $.ajax({ //Perform an asynchronous HTTP (Ajax) request.
type: 'get',
//A string containing the URL to which the request is sent.
url: '<?php echo $this->createUrl('member'); ?>',
...
如果我把它放在php文件中,这是有效的。
但这似乎不是组织事情的好方法,我希望将所有这些代码放在一个单独的.js文件中。
处理这些情景的正确方法是什么?
答案 0 :(得分:4)
我们使用两种方法使服务器端创建的数据可供客户端访问:
1)'数据传输'对象,由服务器端脚本填充。例如:
<强> PHP:强>
<?php
$data = [
'urls' => [
'createSomething' => $this->createUrl($from, $something),
// ...
],
'labels' => [
'createSomething' => $this->cms($labelName),
// ..
],
]
?>
<script>
var dto = <?= json_encode($data) ?>;
</script>
<强> JS:强>
$.ajax(dto.urls.createSomething, {}, function() {
alert(dto.labels.createSomethingSuccess);
}
2)数据集属性,再次由服务器填充。例如:
PHP:
<button data-target-url="<?= $this->createUrl($from, $something) ?>"
>Something</button>
JS:
$('button[data-target-url]').click(function() {
var targetUrl = $(this).data('targetUrl');
$.post(targetUrl...);
}
对于我来说,第二种方法在服务器端仍然计算一些与UI相关的属性集时似乎最有用 - 例如,插件设置。
答案 1 :(得分:1)
最好分割你的php和javascript代码。您可以生成的是一个基本URL,因此javascript可以生成它自己的URL。在你的html中用php生成那些变量。
你的html和php中的例子
<html>
<head>
<script>
var BASE_URL = <?=$baseUrl?>;
</script>
<script src="external.js"></script>
</head>
<body>
</body>
</html>
然后你可以在external.js中使用变量BASE_URL
function showMember() {
return $.ajax({ //Perform an asynchronous HTTP (Ajax) request.
type: 'get',
//A string containing the URL to which the request is sent.
url: BASE_URL + "member",
这是许多网站使用的简单方案。在包含外部脚本之前,在body中生成全局脚本变量。
答案 2 :(得分:0)
您可以调用javascript函数并将url作为函数参数发送。
showMember(<?php echo $this->createUrl('member'); ?>);
在js中捕获并使用它。
function showMember(posturl) {
return $.ajax({ //Perform an asynchronous HTTP (Ajax) request.
type: 'get',
//A string containing the URL to which the request is sent.
url: posturl,