gpt4 book ai didi

javascript - 我如何从 View 页面中的下面的 javascript 代码调用 Controller 函数(Codeigniter)

转载 作者:行者123 更新时间:2023-12-03 02:39:11 24 4
gpt4 key购买 nike

这是核心 PHP 中使用的 JavaScript 代码,用于保存在谷歌地图中输入的数据。我想将变量“url”中的值传递给 Codeigniter 中的 Controller 函数。我该怎么办?

function saveData() {
var name = escape(document.getElementById('name').value);
var address = escape(document.getElementById('address').value);
var type = document.getElementById('type').value;
var latlng = marker.getPosition();
var url = 'phpsqlinfo_addrow.php?name=' + name + '&address=' + address +
'&type=' + type + '&lat=' + latlng.lat() + '&lng=' + latlng.lng();

downloadUrl(url, function(data, responseCode) {

if (responseCode == 200 && data.length <= 1) {
infowindow.close();
messagewindow.open(map, marker);
}
});
}

function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;

request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request.responseText, request.status);
}
};

request.open('GET', url, true);
request.send(null);
}

function doNothing () {
}

最佳答案

要从 GET 请求中获取参数,请使用 CI 库 input 。文档 HERE .

这是一个用于演示目的的简化版本,从 View 文件 viewMap.php

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<button value="test" id='mapsave'>Click Me</button>
<div id="response"></div>

<script>
var el = document.getElementById("mapsave");
el.addEventListener("click", saveData, false);

function saveData() {
var res = document.getElementById("response");
var request = new XMLHttpRequest();
var name, url;
name = "Stevin";
url = "<?= base_url('maps/insert_church_details?name='); ?>" + name;

request.onreadystatechange = function () {
if (request.readyState == 4) {
res.innerHTML = request.responseText;
}
};
request.open('GET', url, true);
request.send();
}
</script>
</body>
</html>

这是 Controller 。我只是将其重命名为 Maps而不是mapController因为它简化了 URL。谁想去就去http://example.com/mapController ?另外,mapController违反 CodeIgniter class naming conventions 。 (更好解释HERE)

class Maps extends CI_Controller
{

public function index()
{
$this->load->view('viewMap');
}

public function insert_church_details()
{
echo $this->input->get('name');
//exit; <- Bad idea for CodeIgniter
}
}

在此示例中,查询字符串中只有一项,我们使用 input->get('name')来获取它。传递给get()的参数是项目的名称。如果我们有多个项目,我们可以一次获取一个或使用 get()不带参数并捕获数组中的所有项目。 (如果这没有意义,请参阅文档。)

调用exitdie在 CodeIgniter 中是一个坏习惯——不推荐。我们在这里不进行过程编程。使用它们将使框架的正常执行路径短路,在这种情况下,绕过可能定义的几个“ Hook ”点。让函数返回并让 CI 遵循其正常执行路径。

重要的是要知道对 base_url() 的调用之所以有效,是因为 JavaScript 是内联包含的。如果您从外部文件加载 js(例如 <script src="assets/js/maps.js"></script> ),它将无法正确评估。

您必须找到另一种方法来创建完整 URL,或使用相对 URL。

以下是如何使用外部 js 文件、发送和获取几个参数、使用相对 URL、以及使用 json 进行响应。

景色

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<button value="test" id='mapsave'>Click Me</button>
<div id="response"></div>

<script src="assets/js/maps.js"></script>
</body>
</html>

Controller

class Maps extends CI_Controller
{

public function index()
{
$this->load->view('viewMap');
}

public function insert_church_details()
{
$name = $this->input->get('name');
$addr = $this->input->get('address');
echo json_encode(['name' => $name, 'addr' => $addr]);
}
}

JavaScript

var el = document.getElementById("mapsave");
el.addEventListener("click", saveData, false);

function saveData() {
var res = document.getElementById("response");
var request = new XMLHttpRequest();
var name, url, address;
name = "Stevin";
address = 'Home';
url = '/maps/insert_church_details?name=' + name + '&address=' + address;

request.onreadystatechange = function () {
var out;
if (request.readyState == 4) {
out = JSON.parse(request.responseText);
res.innerHTML = out.name + ", " + out.addr;
}
};

request.open('GET', url, true);
request.send();
}

关于javascript - 我如何从 View 页面中的下面的 javascript 代码调用 Controller 函数(Codeigniter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48402368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com