2013-10-29 41 views
1

我是一个长期的潜伏者,第一次在Stack Overflow上发布海报(这在之前的一些编程项目中为我省了不少)。我有一个独特的问题,我一直无法通过搜索网站找到,所以我会在这里描述它。来自PHP循环内的JQuery代码的AJAX请求

我正在创建一个在线订单表单,供用户选择食品类别。该类别被发送到运行数据库查询的另一页代码,并将该类别中的所有项目返回到名为ItemXSelect(其中X是项目编号)的下拉框。我没有遇到过这个问题。但是,我在使用用户在另一个AJAX查询中为ItemXSelect选择的值时遇到了问题。具体来说,AJAX请求根本不会发送(根据Firebug)。我希望这是一个简单的语法错误,但我已经好几天了。

下面的代码是在PHP Echo语句中编写的Jquery/AJAX,并且有某些字符被转义。 $ itemNum确定ItemXSelect中X的值。

\$(\"#Item" . $itemNum . "Select option:selected\").change(function() { 
var sel = \$(\"#Item" . $itemNum . "Select option:selected\").text()); 
    \$.ajax({ 
     type: \"POST\", 
     url: \"sizearray.php\", 
     data: { category: \"Cold_Sandwiches\" , selection: sel }, 
     dataType: \"text\" 
    }).done(function(result) { 
     \$(\"#Item" . $itemNum . "Size\").html(result); 
    }); 
    \$(\"#Item" . $itemNum . "Size\").show(); 
}); 

这一直困扰着我好几天。我感谢所有能够帮助我找到问题的人(甚至至少可以尝试)。

============================================== =======================================

编辑1

谢谢为了您的帮助,我已经通过将所有JQuery包装在PHP EOD语句中来清理代码。这样,我不必逃避整个事情。以下是更新的代码。以下建议至今尚未解决主要问题,但至少其语法更为简洁。

jQuery("#Item{$itemNum}Select option:selected").change(function() { 
    var sel = jQuery("#Item{$itemNum}Select option:selected").text()); 
     jQuery.ajax({ 
      type: "POST", 
      url: "sizearray.php", 
      data: { category: "Cold_Sandwiches" , selection: sel }, 
      dataType: "text" 
     }).done(function(result) { 
      jQuery("#Item{$itemNum}Size").html(result); 
     }); 
     jQuery("#Item{$itemNum}Size").show(); 
    }); 
+1

你为什么逃离这么多事情? – tymeJV

+0

你应该尝试一个[PHP多行字符串](http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc)来处理所有这些。 – lxe

+1

您可以在获取选择值的行上的浏览器中设置断点吗?更改事件是否正在发射? –

回答

0

所有这些行看起来很有趣。我不知道PHP,但它看起来像你有不匹配的引号。

\$(\"#Item" . $itemNum . "Select option:selected\").change(function() { 

\$(\"#Item" . $itemNum . "Size\").html(result); 

\$(\"#Item" . $itemNum . "Size\").show(); 
+0

它看起来这么奇怪的原因是因为当你写一个PHP回声声明它看起来像这样: 回声“有些话之类的东西” ,并有该声明中引用你需要做到这一点 回声“一些“单词”和东西“ 我将它留在你的想象中,当你在一个PHP echo语句中使用JQuery时,多少转义引号可能会使语法变得糟糕。它变得讨厌。 –

0

或者您可以在客户端使用jQuery进行实时绑定。

编辑

在JavaScript

$('select').change(function(){ 
     alert(this.options[this.selectedIndex].value); 
    }); 

HTML

<select> 
    <option value="apple">Apple</option> 
    <option value="orange">Orange</option> 
</select> 

所以每个选择添加(通过动态AJAX)将自动绑定到更改事件。

或者你也可以用更复杂但更不容易出错的方法,只用JSON从服务器请求数据并用数据填充控件。

+0

我试过你的建议'jQuery(“#Item {$ itemNum} Select”)。live('change',function(){'但它没有解决我的问题。难道是变量'sel'不正确? –

+0

$ itemNum必须是一个固定的或静态的数字,或者所有的选择控件都必须有一个公共属性,您可以将它用作客户端的选择器。 – TheRealChx101