未捕获的语法错误:当php在函数参数中放置单个qutoe或撇号时,出现意外的标识符-JS错误
好的,我正在使用AJAX从Web服务生成一个潜在客户匹配列表。除了我的pHp中的这个部分外,其他一切都正常工作未捕获的语法错误:当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
$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>";