Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未捕获的语法错误:当php在函数参数中放置单个qutoe或撇号时,出现意外的标识符-JS错误_Php_Javascript_Jquery_Ajax - Fatal编程技术网

未捕获的语法错误:当php在函数参数中放置单个qutoe或撇号时,出现意外的标识符-JS错误

未捕获的语法错误:当php在函数参数中放置单个qutoe或撇号时,出现意外的标识符-JS错误,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,好的,我正在使用AJAX从Web服务生成一个潜在客户匹配列表。除了我的pHp中的这个部分外,其他一切都正常工作 $html = "<h3> Search Results: "; if(!is_array($searchResults)) { $html .= $searchResults . "</h3>"; } else{ $html .= "</h3

好的,我正在使用AJAX从Web服务生成一个潜在客户匹配列表。除了我的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;
以下是我的select 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>
你可能已经注意到我的JS中有一点pHp使用了Joomla:p。。。此功能已成功用于其他两种情况。只有从通过AJAX显示的onclick调用它时,它才会失败

Chrome不断抛出未捕获的SyntaxError:意外的标识符,但没有行。我假设它与onclick调用有关

我进入chrome的检查元件,发现:

<a href="#" onclick="selectCustomer('13064 Moto's Burger Palace')">13064 Moto's Burger Palace</a>
这就是明显的问题,对吗?这和你小时候在我的单引号论点中加上撇号是一样的。但是htmlentities函数不应该阻止这一点吗。。。不,因为撇号是由浏览器渲染的

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

我更愿意改变这一行,但愿意接受其他可能性:

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

通过不使用onclick属性,可以大大简化它

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

@PRPGFerret把它钉死了。我在搜索时也发现了另一种可能性:

解决方案1:

解决方案2:


PHP生成的javascript是什么样子的?将斜杠添加到PHP值中,以便在调用JS之前转义带引号的字符串called@PRPGFerret引号不是唯一的问题,换行符和段落分隔符也会破坏它。。。当它很容易避免的时候,它根本不值得。。。在这一点上没有骰子。尝试过但失败了。。。甚至没有调用函数。使用onclick还有什么问题?添加jQuery函数来完成onclick所做的事情如何更简单?我认为这样做行不通,因为我将通过AJAX显示列表,这意味着[data customer]在页面加载后才会显示。@Cleanshooter如我所说,您不必使用此选项来转义HTML和Javascript,这就是它的简单之处。您还可以为可维护性提供参数,但这在这里不必要。@Cleanshooter我已编辑了使用事件委派的代码,以便它在绑定侦听器时未创建的元素上工作。从外观上看,htmlspecialchars并没有真正做任何有成效的事情:。。。但现在看来它可以工作了。。。我从来没有在jQuery中使用过事件委派有趣的:@Cleanshooter我不知道这意味着什么:如果您认为htmlentities更适合您,您也可以使用htmlentities。但是现在您没有为html编码,\n将打破该属性并将其弄乱。对于您需要的HTML…正如您前面指出的,我两次转义了pHp端和javascript函数中的内容。encodeURIComponent应该转义所有需要转义的字符。我希望您使用包含换行符、双引号和单引号的输入进行测试
$(document).on("click", "[data-customer]", function(){
    selectCustomer($(this).attr("data-customer"));
});
$html .= '<li> <a href="#" onclick="selectCustomer('. "'" . addslashes($result->entityId) . "'" . ')">' . $result->entityId . "</a></li>";
$html .= '<li> <a href="#" onclick="selectCustomer(this.id)" id="' . $result->entityId . '">' . $result->entityId . "</a></li>";