Ładuję recaptcha za pomocą AJAX. Jedna z linii tam od tego, co zostanie zwrócona z pozostałych stron, jest linia poniżej, a ta linia nie zostanie załadowana do mojego div, kiedy używam $(.cap).html(callBack);

To jest linia

<script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=6LcXq-oSAAAAAOgwSIew_xq6xkv1QUxrZbRcMz6n"></script>

Czy to coś, co rozluźnia? Czy robię coś złego? Jak mogę to rozwiązać? Jak mogę dostać jQuery wrócił z innej strony, do mojego <div>?

To, co testuję, jest proste:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>No Tile</title>

<script type="text/javascript" src="http://localhost/site/scripts/jQuery.js"></script>

<style type="text/css">
.user {
    cursor: pointer;
}
</style>

<script type="text/javascript">
$(document).ready(function() {
    //$(".user").live("click",function() {
    $(".user").click(function() {

        data = "id=Hello"

        $.ajax({
              type:"GET",
               url:"demo.php",
              data:data,
          dataType:"html",

        beforeSend:function(html){

        },

        success: function(callBack){
            $(".cap").html(callBack);

            console.log(callBack);
        },

        error: function(page_data){

        },

        });

    });
});
</script>
</head>
<body>

<div id="container">

<div class="cap">Hello</div>

<span class="user">Add User</span>
</div>

</body>
</html>

Jest to linia zwrócona z drugiej strony, która nie zostanie załadowana do div.

<script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=6LcXq-oSAAAAAOgwSIew_xq6xkv1QUxrZbRcMz6n"></script>

Całe dane zwrócone

<script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=6LcXq-oSAAAAAOgwSIew_xq6xkv1QUxrZbRcMz6n"></script>

    <noscript>
        <iframe src="http://www.google.com/recaptcha/api/noscript?k=6LcXq-oSAAAAAOgwSIew_xq6xkv1QUxrZbRcMz6n" height="300" width="500" frameborder="0"></iframe><br/>
        <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
        <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
    </noscript>
0
Norman 22 listopad 2013, 10:54

2 odpowiedzi

Najlepsza odpowiedź

Nie można zwrócić znaczników "skrypt", nawet w formacie łańcuchowym. To ze względu na sposób, w jaki działa JavaScript. Możesz jednak pozwolić swojemu demo.php skryptowi powrócić do JSON. Powinieneś to spojrzeć na siebie, ale nie wierzę, że łatwo jest inny sposób. (Cóż, gorsza praktyka, możesz zwrócić ciąg i przeanalizować wartości z tego, ale ...). W każdym razie, jeśli zakładasz, że zwrócisz obiekt JSON w poniższym formacie, możesz po prostu skopiować wkleić resztę w funkcji sukcesu i zmienić nazwę obiektu na "Callback" ...

var json = {
    type: "text/javascript",
    scriptSrc: "http://www.google.com/recaptcha/api/challenge?k=6LcXq-oSAAAAAOgwSIew_xq6xkv1QUxrZbRcMz6n",
    id: "theFrame",
    iframeSrc: 'http://www.google.com/recaptcha/api/noscript?k=6LcXq-oSAAAAAOgwSIew_xq6xkv1QUxrZbRcMz6n'
};

var script = document.createElement('script');
script.type = json.type;
script.src = json.scriptSrc;

$('<iframe>', {
   src: json.iframeSrc,
   id:  json.id,
   frameborder: 0,
    height: 300,
    width: 500
   }).appendTo('.cap');

Jsfiddle: http://jsfiddle.net/vt3ug/1/

5
Tsasken 22 listopad 2013, 08:57

W rzeczywistości jest możliwe do renderowania znaczników JavaScript. na przykład HTML5 Ballermplate używa go, aby sprawdzić, czy powinien załadować jQuery lokalne lub z CDN.

<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

Jak widać, jeśli wstrzykniesz znaczniki skryptów, musisz uciec ze skryptem zamykającym <\/script>.

Z drugiej strony jesteś nie może zrób to

<noscript>
    <iframe src="http://www.google.com/recaptcha/api/noscript?k=6LcXq-oSAAAAAOgwSIew_xq6xkv1QUxrZbRcMz6n" height="300" width="500" frameborder="0"></iframe><br/>
    <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
    <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
</noscript>

Po prostu dlatego, że nie jesteś właścicielem źródła IFRAME, twój iframe nie zostanie zrealizowany.

Ale możesz zrobić coś takiego:

callBack = callBack.replace('</script','<\/script')
                   .replace('<noscript>','')
                   .replace('</noscript>','');

$('body').append(callback);
1
Dieterg 29 listopad 2013, 18:40