PHP循环中来自JQuery代码的AJAX请求

Posted

技术标签:

【中文标题】PHP循环中来自JQuery代码的AJAX请求【英文标题】:AJAX Request from JQuery Code within PHP Loop 【发布时间】:2013-11-09 01:33:24 【问题描述】:

我是一个长期的潜伏者,第一次在 Stack Overflow 上发帖(这让我在之前的很多编程项目中受益)。我有一个独特的问题,我无法通过搜索网站找到,所以我会在这里描述它。

我正在创建一个在线订单表格,用户可以在其中选择食品类别。该类别被发送到另一个代码页面,该页面在数据库上运行查询并将该类别中的所有项目返回到名为 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$itemNumSelect option:selected").change(function() 
    var sel = jQuery("#Item$itemNumSelect option:selected").text());
        jQuery.ajax(
            type: "POST",
            url: "sizearray.php",
            data:  category: "Cold_Sandwiches" , selection: sel ,
            dataType: "text"
        ).done(function(result) 
            jQuery("#Item$itemNumSize").html(result);
        ); 
        jQuery("#Item$itemNumSize").show();
    );

【问题讨论】:

你为什么要逃避这么多东西?? 您应该尝试使用PHP multiline string 来处理所有这些问题。 你能在浏览器中获取选择值的那一行设置一个断点吗?更改事件是否触发? Ixe,我实际上已经完全忘记了多行字符串,我很高兴你提出来了。我将用 EOD-ready 的东西替换我的乱七八糟的代码。我首先避免它的原因是因为我不知道你可以在其中调用 PHP 变量。我想你知道的越多。 单引号也可以避免转义(而且你不需要双引号,因为你只是在附加变量) 【参考方案1】:

所有这些台词看起来都很有趣。我不了解 PHP,但在我看来,您的引号不匹配。

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

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

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

【讨论】:

它看起来如此奇怪的原因是,当您编写 PHP echo 语句时,它看起来像这样: echo "Some words and stuff" 并且要在该语句中包含引号,您需要执行此 echo “一些“单词”之类的东西”当你在 PHP 回显语句中使用 JQuery 时,我会让你想象一下,转义引号会在多大程度上混淆语法。它变得令人讨厌。【参考方案2】:

或者您可以在客户端使用 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 格式从服务器请求数据并使用数据填充控件。

【讨论】:

我尝试了你的建议jQuery("#Item$itemNumSelect").live('change',function() ,但它并没有解决我的问题。难道sel这个变量不正确? $itemNum 必须是一个固定的或静态的数字,或者您的所有选择控件必须具有一个通用属性,您可以将其用作客户端的选择器。再次检查我的帖子,我编辑了它

以上是关于PHP循环中来自JQuery代码的AJAX请求的主要内容,如果未能解决你的问题,请参考以下文章

通过 Jquery 启动/停止 Ajax 调用

如何在 Firefox 中解码来自 jQuery $.ajax 请求的 XML 响应

使用 ajax、jquery 和 PHP 从数据库更新图像不起作用

jQuery Ajax

使用循环在 HTML 中显示来自 jQuery.ajax 的 json 数据

jQuery Ajax 操作函数