0

好吧,我正在使用 AJAX 从 WebService 生成潜在客户匹配列表。除了我的 pHp 中的这一部分之外,一切都在工作......

$html = "<h3> Search Results: ";

        if(!is_array($searchResults))
        {
            $html .= $searchResults . "</h3>";
        }
        else{
            $html .= "</h3><ul>";
            foreach($searchResults as $result)
            {
                $html .= '<li> <a href="#" onclick="selectCustomer('. "'" . htmlentities((string)$result->entityId, ENT_QUOTES) . "'" . ')">' . $result->entityId . "</a></li>";
            }
            $html .= "</ul>";
        }

        echo $html;

这是我的选择 JavaScript selectCustomer 函数:

    <script>
function selectCustomer(selectedCustomer){
            $.ajax({
                type: 'GET',
                url: "<?php echo JURI::base() . "index.php?option=com_sample&view=place_order&task=getCustomer&customerName=";?>" + encodeURIComponent(selectedCustomer),
                beforeSend:function(){
                    $('#CustomerInfo').html('<div class="loading"><img src="<?php echo JURI::base() . "components/com_joomsuite/assets/images/ajax-loader.gif"?>" alt="Loading..." /></div>');
                },
                success:function(data){
                    $('#CustomerInfo').html(data);
                    $('#customerEmail').val($('#customerEmailAJAX').html());
                    $('#customerName').val($('#customerNameAJAX').html());
                },
                error:function(){
                    $('#ajax-panel').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>');
                }
            });
        }
</script>

您可能已经注意到在我使用 Joomla 的 JS 中出现了一点 pHp :P... 这个函数在其他 2 种情况下成功使用。仅当从通过 AJAX 显示的 onclick 调用它时才会失败。

Chrome 不断抛出“Uncaught SyntaxError: Unexpected identifier”,但没有第 # 行。我假设它与 onclick 调用有关。

我进入了 chrome 的检查元素,发现了这个:

<a href="#" onclick="selectCustomer('13064 Moto's Burger Palace')">13064 Moto's Burger Palace</a>

所以这是明显的问题吗?它与您小时候的“您将撇号放在我的单引号中”的说法相同。但是 htmlentities() 函数不应该阻止这种情况……不,因为撇号是由 chrome(浏览器)呈现的。

所以我的问题是(最后)我可以在我的 php 函数中改变什么,这将允许 onclick 运行我的 selectCustomer 函数并正确传递一个可能包含或不包含撇号的字符串......

我宁愿改变这条线(但愿意接受其他可能性):

$html .= '<li> <a href="#" onclick="selectCustomer('. "'" . htmlentities((string)$result->entityId, ENT_QUOTES) . "'" . ')">' . $result->entityId . "</a></li>";
4

2 回答 2

0

@PRPGFerret 做到了。我在搜索时也发现了另一种可能性:

解决方案1:

$html .= '<li> <a href="#" onclick="selectCustomer('. "'" . addslashes($result->entityId) . "'" . ')">' . $result->entityId . "</a></li>";

解决方案2:

$html .= '<li> <a href="#" onclick="selectCustomer(this.id)" id="' . $result->entityId . '">' . $result->entityId . "</a></li>";
于 2013-03-21T17:50:31.473 回答
0

您可以通过不使用 onclick 属性来简化它。

<a href="#" data-customer="<?php echo htmlspecialchars($result->entityId); ?>">13064 Moto's Burger Palace</a>

这样你只需要为 html 转义,而不是为 HTMLJavascript 转义,这太疯狂了。

然后只需像这样简单的静态代码:

$(document).on("click", "[data-customer]", function(){
    selectCustomer($(this).attr("data-customer"));
});
于 2013-03-21T17:19:31.993 回答