0

さて、私は 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>

Joomla を使用して私の JS で少し pHp に気づいたかもしれません:P... この関数は、他の 2 つの状況で正常に使用されます。AJAX経由で表示されるonclickから呼び出された場合にのみ失敗します。

Chrome は「Uncaught SyntaxError: Unexpected identifier」をスローし続けますが、行番号はスローしません。onclick 呼び出しと関係があると思います。

私はクロムの検査要素に入り、これを見つけました:

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

それで、ここに明らかな問題がありますよね?あなたが子供の頃からの同じ古い「あなたは私の単一引用符であなたのアポストロフィを置きます」という議論です。しかし、htmlentities() 関数がこれを防いでいるべきではありません... アポストロフィがクロム (ブラウザ) によってレンダリングされるためです。

したがって、私の質問は(最終的に)onclickがselectCustomer関数を実行し、アポストロフィを含む場合と含まない場合がある文字列を正しく渡すことができるように、php関数で何を変更できるかです...

私はこの行を変更したいと思います (しかし、他の可能性を受け入れる用意があります):

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

2 に答える 2

0

onclick 属性を使用しないことで、大幅に簡素化できます。

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

そうすれば、HTMLJavascript ではなく、html をエスケープするだけで済みます。これは正気ではありません。

次に、次のような単純な静的コードを作成します。

$(document).on("click", "[data-customer]", function(){
    selectCustomer($(this).attr("data-customer"));
});
于 2013-03-21T17:19:31.993 に答える
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 に答える