我有以下函数。一个应该接收一个id,然后应该通过AJAX以POST请求的方式传输id。
然而,虽然我知道"initiateSubCategories"函数正在工作,但无论出于何种原因,ajax函数拒绝工作。它应该将数据发送到调用它的同一个文件,我有一种感觉,这可能是问题所在。
我做错了什么吗?我已经尝试过通过jslint验证我的JavaScript,但所有这些都给了我一些关于我的代码格式的基本抱怨(这不是这里的问题,但将在我修复这个问题之后)。
下面是我的代码:
function sendAjaxDataViaPost(pathToFile, ajaxData) {
$.post(pathToFile, function(ajaxData) {
alert("Data loaded: " + ajaxData);
$('#pageOne').append('<pre>' + ajaxData '</pre>');
});
}
function initiateSubCategories(parent) {
//$("#pageOne").append("<pre>" + parent + "</pre>");
sendAjaxDataViaPost('form.php', parent);
<?php
$categories = $this->formData->getCategories($_POST['value']);
?>
printSubCategories(<?=$categories;?>);
}
那么,我做错了什么呢?我在Firefox和Chrome上都试过了,但都没能生成任何东西。
我将函数更改为使用以下格式:
$.post(pathToFile, { id: ajaxData }, function(ajaxData) {
alert("Data loaded: " + ajaxData);
$('#pageOne').append('<pre>' + ajaxData '</pre>');
});
然而,当我试图降落$_POST['id']
时,它告诉我它没有被引用。
? ?
更新2
我刚刚在FireBug的控制台中发现我的"initiateSubCategories"函数未定义。我想知道的是这是怎么可能的……
我将把我的全部代码贴出来——另一双眼睛可能会对这件事有帮助。
<?php
$target = JPATH_BASE.DS."index.php?action=com_adsmanager&task=save&Itemid=".$this->itemId;
$saveTarget = JPATH_BASE.DS."index.php?action=com_adsmanager&task=Itemid=".$this->itemId;
function populateCategories($parent, FormData $formData) {
$categories = $formData->getCategories($parent);
foreach($categories as $section => $row){
?>
<option value=<?=$row['id'];
?>>
<?php
echo $row['name'];
?>
</option>
<?php
}
}
?>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
</script>
<script type="text/javascript">
function sendAjaxDataViaPost(pathToFile, ajaxData) {
$.post(pathToFile, {'id' : ajaxData}, function(ajaxData) {
alert("Data loaded: " + ajaxData);
$('#pageOne').append('<pre>' + ajaxData '</pre>');
});
}
function initiateSubCategories(parent) {
sendAjaxDataViaPost('form.php', parent);
$("#pageOne").apppend('<pre>' + <?=$_POST;?> + '</pre>'));
}
function printSubCategories(categories) {
for (var i = 0; i < categories.length; i++) {
var opt = document.createElement("option");
opt.text = categories['name'];
opt.value = categories['id'];
$("#subcategories").append(opt);
}
}
</script>
<div id="pageOne">
<form action=<?=$saveTarget;?> method="post" enctype="multipart/form-data">
<select name="category" id="categories" class="ads_categories" onclick="initiateSubCategories(this.value);">
<option value="0">--Please choose a category--</option>
<?php populateCategories(0, $this->formData); ?>
</select>
<select name="category" id="subcategories" class="ads_subcategories">
<option value="0">--Please choose a subcategory--</option>
</select>
</form>
</div>
尝试将post call更改为
$.post(pathToFile, { 'id': ajaxData }, function(ajaxData) {
alert("Data loaded: " + ajaxData);
$('#pageOne').append('<pre>' + ajaxData '</pre>');
});
我假设你在调用
之前通过ajaxData发送一些值function sendAjaxDataViaPost(pathToFile, ajaxData) {