包含两个选择的表单
<form name="portfolios" action="{{ path('v2_pm_portfolio_switch') }}" method="post" >
<select id="portfolios" name="portfolio" style="width: 200px; height:25px;">
<option selected="selected" value="default">Select Portfolio</option>
{% for portfolio in portfolios %}
<option get-groups="{{ path('v2_pm_patents_getgroups') }}" value={{ portfolio.id }}>{{ portfolio.portfolioName }}</option>
{% endfor %}
</select><br/><br/>
<select id="portfolio-groups" name="portfolio-groups" style="width: 200px; height:25px;">
<option selected="selected" value="default">Select Portfolio Group</option>
</select><br/>
</form>
JS
<script>
$(document).ready(function(){
$('#portfolios').change(function() {
var id = $("#portfolios").val();
var url = $('option:selected', this).attr("get-groups");
var data = {PID:id};
$.ajax({
type: "POST",
data: data,
url:url,
cache: false,
success: function(data) {
//want to populate the 2nd select box here
}
});
});
});
</script>
控制器方法,我找到所选投资组合的组
public function getgroupsAction(Request $request){
if ($request->isXmlHttpRequest()) {
$id = $request->get("PID");
$em = $this->getDoctrine()->getEntityManager();
$portfolio_groups = $em->getRepository('MunichInnovationGroupPatentBundle:PmPatentgroups')
->getpatentgroups($id);
return $portfolio_groups;
}
}
我知道如何发送投资组合并填充第二个选择
提前致谢
答案 0 :(得分:2)
使用getJson
代替ajax()
;
Json(JavaScript Object Notation),是在php和javascript之间发送结构化数据的最简单方法。
我假设控制器直接响应ajax查询,$portfolio_groups
是一个关联数组,其中“id”和“name”作为键或具有相同属性的对象。
在PHP控制器中发送json数据:
public function getgroupsAction(Request $request){
if ($request->isXmlHttpRequest()) {
$id = $request->get("PID");
$em = $this->getDoctrine()->getEntityManager();
$portfolio_groups = $em->getRepository('MunichInnovationGroupPatentBundle:PmPatentgroups')
->getpatentgroups($id);
echo json_encode($portfolio_groups);
}
}
然后使用getJson检索数据并迭代它:
$.getJSON(url, data, function(result) {
var options = $("#portfolio-groups");
$.each(result, function(item) {
options.append($("<option />").val(item.id).text(item.name));
});
});
请查看getjson documentation了解有关它的详细信息
答案 1 :(得分:0)
查看这个XML tutorial(那里的某人会激怒我链接到w3schools)这是一个好的开始。
非常广义地说,AJAX请求使浏览器打开一个只能看到(而不是用户)的窗口。向服务器发出请求,服务器返回一个页面,发出请求的脚本可以查看该页面。这意味着任何可以用文本表达的东西都可以通过AJAX传输,包括XML(AJAX中的X代表)。
这有什么用?考虑一下,如果您尝试填充下拉列表,则需要返回一个项目列表以填充它。您可以对页面http://www.mysite.com/mypage.php?d=select1
进行ajax调用(如果您不熟悉GET和POST请求,或者对于AJAX更实用的方面有点暗淡,可以使用另一个完整的教程here并让它返回一个项目列表如下:
item1
item2
item3
...
扫描文本以查找换行符。虽然这肯定适用于大多数情况,但它并不理想,并且在所有其他可能使用AJAX的情况下肯定不会有用。而是考虑用XML格式化PHP中的返回值(.NET,ASP,等等):
<drop>
<item>item1</item>
<item>item2</item>
<item>item3</item>
</drop>
使用内置解析器的Javascripts(概述here)来获取数据。
答案 2 :(得分:0)
我要做的是使用$ .load()函数。
为此,您的getgroupsAction
应返回选项html。
JS:
<script>
$(document).ready(function(){
$('#portfolios').change(function() {
var id = $("#portfolios").val();
var url = $('option:selected', this).attr("get-groups");
var data = {PID:id};
// Perhaps you want your select to show "Loading" while loading the data?
$('#portfolio-groups').html('<option selected="selected" value="default">Loading...</option>');
$('#portfolio-groups').load(url, data);
});
});
</script>
我不知道$portfolio_groups
如何存储数据,但是假设你在回复中做了类似的事情:
<?php foreach($portfolio_groups as $p) : ?>
<option value="<?php echo $p->value ?>"><?php echo $p->name ?></option>
<?php endforeach ?>
这样,选择将填充getgroupsAction
输出的选项。
答案 3 :(得分:0)
最简单的方法是从控制器返回json字符串,然后在$ .ajax的'success'调用中处理它。
让我们假设您的$ portfolio_groups变量是一个数组:
$portfolio_groups = array('1'=>'Portfolio 1', '2' => 'Portfolio 2');
然后你可以像控制器一样从控制器返回它:
echo json_encode($portfolio_groups);
然后在你的jQuery ajax调用中你可以在响应中捕获这个字符串($ .ajax的'success'设置)。不要忘记添加设置dataType:'json'
粗略地说,您的$ .ajax调用将如下所示:
$.ajax({
type: "POST",
data: data,
url:url,
cache: false,
dataType: 'json', // don't forget to add this setting
success: function(data) {
$.each(data, function(id, title){
var node = $('<option>').attr('value', id).html(title);
// this will simply add options to the existing list of options
// you might need to clear this list before adding new options
$('#portfolio-groups').append(node);
});
}
});
当然,如果数据不为空,您还需要添加检查等。
答案 4 :(得分:0)
假设函数 getgroupsAction 保留在一个扁平的php控制器(不在类中),你应该告诉服务器执行函数
所以在ajax调用文件的末尾你几乎不应该首先调用该函数(可能是你做过了!)
对于您的专利组结果集,您可以通过php或javascript生成选择
在第一种情况下,你应该这样做:
//php
$options = getgroupsAction($_REQUEST);
$return = "<select name =\"name\" id=\"id\"><option value=\"\"></option>";
foreach( $options as $option){
$return.= "<option value=\"$option\">$option</option>";
}
$return .= "</select>";
echo $return;
然后在Javascript中: // javascript
var data = {PID:id};
$.ajax({
type: "POST",
data: data,
url:url,
cache: false,
success: function(data) {
//inside data you have the select html code so just:
$('#divWhereToappend').append(data);
},
error: function(data) {
//ALWAYS print the error string when it returns error for a more easily debug
alert(data.responseText);
}
});