2011-04-25 119 views
0

我正在PHP CMS上工作,并且陷入了困境和困境,那些是CSS和AJAX。我试图弄清楚的问题是如何让AJAX/JSON和PHP返回可以填充到表单中的值。通过JSON/Ajax从PHP返回值

在我的一个网页上我有一个带有选择列表的表单。当用户从列表中选择一个选项时,AJAX脚本请求来自PHP文件的响应,该文件将结果输出回浏览器。这工作正常。

然而,jquery/CSS不会在返回的结果中设置复选框等特定元素。

我想要做的是向用户提供一个窗体,顶部有一个选择菜单,下面是空的输入字段。当他们从菜单中选择一个选项时,下面的表单域将填充返回数据。表单本身由文本字段,文本区域和选择列表组成,我希望每个人都更新它们的值以匹配相应的返回数据。

首先...这是可能的吗?其次......如果它,你能指出我在正确的语法流程方面还是我可以学习的示例脚本。

在此先感谢。

+0

是的CSS和Ajax吸=) – Rudie 2011-04-25 02:44:23

回答

0

是的,可能的并不是很难实施。比方说,你的HTML看起来像这样(这显然是丑陋的;)):

<select id="update"> 
    <option value="0">0</option> 
    <option value="1">1</option> 
    <option value="2">2</option>  
</select> 
<form action="#" method="POST"> 
    <label for="txt">Text:</label><input type="text" id="txt"/><br/> 
    <label for="sel">Select:</label><select id="sel"></select><br/> 
    <label for="txta">TextArea:</label><textarea id="txta"></textarea><br/> 
</form> 

你可以写上去的是填充在success响应表单数据,像这样一个快速的jQuery Ajax请求:

$(document).ready(function(){ 
    $('#update').change(function(){ 
     $.ajax({ 
      url: '/echo/json/', 
      dataType: 'json', 
      type: 'POST', 
      data: { 
       'json': $('#update').val() 
        }, 
      success: function(data){ 
       $('#txt').val(data); 
       $('#sel option').remove(); 
       $('#sel').append($('<option></option>').attr('value', data).text(data)); 
       $('#txta').val(data); 
      } 
     }); 
    }); 
}); 

Fiddle here

注意你的脚本将取决于你正在推动数据代入式(如T的元素他在输入文本,textarea和select中的区别)。

+0

谢谢你们的帮助。我已经把你的帮助中借用的东西放在一起,并且在所有最新的浏览器版本中工作正常。 – 2011-04-25 05:39:41

0

解决方案很简单:

  1. 店内所有的onload/domready中的新功能(pimpHTML或东西)功能。
  2. 运行它的onload/ondomready>复选框等风格
  3. 来看,它的每个DOM变化(半自动地)

0.3后。并不难。只要创建一个功能setHtml(obj, html)(或某事),其插入响应HTML为节点,然后重做pimpHTML

准备:

function pimpHTML() { 
    // checkboxes 
    // radiobuttons 
    // ajax links 
    // etc 
} 
$(pimpHTML); // or $(documemt).ready(pimpHTML); 
function setHtml(obj, html) { 
    obj.html(html); 
    pimpHTML(); 
} 

半内联:

var obj = ...; // form or messagebox or something 
$.post('/', function(rsp) { 
    setHtml(obj, rsp); 
}); 

显然,这是不喜欢做这一点,你必须改善和自己指定它。