0

別のドメインへのコールバックを行う次のサイトがあります。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title> Example Entry Form </title>

    <script src="http://code.jquery.com/jquery-1.7.2.js" type="text/javascript"></script>
    <script type="text/javascript">
    function getParameters(){
        // login
        //window.showModalDialog('http://localhost:8080/test/login/check.mvc','','dialogWidth:500px; dialogHeight:350px; resizable:no; unandorned:yes; status:no; ');
        //get data
        $.getJSON('http://localhost:8080/test/secure/profile/services/export/getuser.mvc?callback=?',function(res){
            alert('Your name is '+res.lname);
            $('#lastname').val(res.lname);
            $('#firstname').val(res.fname);
            $('#club').val(res.club);
            $('#phone').val(res.phone);
            $('#mobile').val(res.mobile);
            $('#mail').val(res.email);
            $('#street_nr').val(res.streetNr);
            $('#zip_city').val(res.zip + " " + res.city);
            $('#birthday').val(res.birthday);
        })
        .error(function(){
            alert("Error");
        })
        .complete(function(){
            alert("Complete");
        });
        alert("Script End!");
    }
    </script>
</head>

<body >

    <h1>Entry Form</h1>

    <table>
     <tr>
      <td style="width:400px;">
        <form action="save.php" id="FormName">
            <table>
                <tr>
                    <td>Lastname:</td>
                    <td><input type="text" id="lastname"/></td>
                </tr><tr>
                    <td>Firstname:</td>
                    <td><input type="text" id="firstname"/></td>
                </tr><tr>
                    <td>Club:</td>
                    <td><input type="text" id="club"/></td>
                </tr><tr>
                    <td>Mobile:</td>
                    <td><input type="text" id="mobile"/></td>
                </tr><tr>
                    <td>Telephone:</td>
                    <td><input type="text" id="phone"/></td>
                </tr><tr>
                    <td>eMail:</td>
                    <td><input type="text" id="mail"/></td>
                </tr><tr>
                    <td>Street+Nr:</td>
                    <td><input type="text" id="street_nr"/></td>
                </tr><tr>
                    <td>ZIP+City:</td>
                    <td><input type="text" id="zip_city"/></td>
                </tr><tr>
                    <td>Birthday:</td>
                    <td><input type="text" id="birthday"/></td>
                </tr><tr>
                    <td>&nbsp;</td>
                    <td><button type="submit">Send Form</button>
                </tr>
            </table>
        </form>
      </td>
      <td valign="top">
        <a href="" onclick="getParameters();"><img src="script/pic.png" alt="Get Data"/></a>
      </td>
     </tr>
    </table>
</body>
</html>

記載されているスクリプトは、2つの主要な問題を除いて、正常に機能します。

  1. alert()がある場合にのみ機能します。&.getJSON()関数にないスクリプト内。
  2. 最後のalert();の後 サイトがリロードされ(ブラウザはhttp://code.jquery.com/- > jqueryスクリプトと表示します)、終了後に起動します(「スクリプトの終了!」) 。すべてのデータが失われました。

なんで?そして、どうすればこれを修正できますか?

4

2 に答える 2

0

onclick="return getParameters();"で置き換えalertてみてくださいreturn false;(またはそれは本当でしたか?)

aまたは、タグを。に置き換えspanます。または、それを完全に削除して、に追加onclickimgます。

ここで何が起こるかというと、非同期要求を開始し、リンクをクリックしたときに通常行われることを続行します。

于 2012-07-18T14:22:41.317 に答える
0

タグに空のhrefがあり、関数がページのリダイレクトを停止していないため、ページがリダイレクトされています。

[OK]を押すまでアラートがウィンドウのリダイレクトを停止するため、アラートで機能します。

マイケルが提案したように、returnfalseを使用してみてください。

ただし、onClickを使用することは悪い習慣です。

または、jQueryバインドを使用してクリックハンドラーをバインドできます(これはベストプラクティスです)。

次のようにHTMLを更新します。

<td valign="top">
        <a href='#' id='someButton'><img src="script/pic.png" alt="Get Data" /></a>
      </td>

次に、scriptタグで、次のようにします。

 $('#someButton').bind('click', getParameters);

そしてあなたの関数でこれを行います:

function getParameters(e){
 ..... // your code here
 e.stopPropagation();
 e.preventDefault();'
}

于 2012-07-18T14:29:21.210 に答える