0

jqueryを使用した簡単なAjax呼び出しがあります。

jQuery(".deletebutton").on("click", function() {
    if (confirm("Are you sure you want to delete?"))
    {
        jQuery.ajax({
            url: 'index.php?option=com_recordings&task=deletevideos&format=raw',
            type: "POST",
            success: function(data){
                console.log("anything?"); //never get here with FF and Chrome
                if (data == 'blah')
                {
                    alert("success"); //only with IE
                }
            }
        });
    }
});

Joomlaコンポーネント開発を使用しているため、URLがおかしいです。これは基本的に、。を持つファイルを指しますecho "blah";。htmlは、クラスを持つ単なるボタンdeletebuttonです。

IEでは、このコードは正常に機能し、アラートが発生します。FFとChromeでは機能しません。ショーをチェックすると、 jqXHR.status0が返されることがわかります。Firebugには、ここで問題を指摘するものは何もありません。何が起こっているのか分かりますか?

編集:私はそれが私のhtmlボタンと関係があることに気づきました。現在のボタンはフォーム内にあります。

        <form name="myform" action="">
        <table id="webcam-table" class="pretty">
            <thead>
            <tr>
                <th>Camera Name</th>
                <th>Date Created</th>
                <th>Video Size</th>
                <th>Video Length</th>
                <th>
                    <input type="checkbox" name="checkboxselectall" title="Select All" />
                    <button class="deletebutton" title="Delete the selected videos" >Delete</button>
... //a table with checkboxes (for the form) and other stuff
</form>

しかし、このフォームの外に単純なボタンを作成すると、ajax呼び出しは期待どおりに機能します。ここで何が起こっているのですか?

4

3 に答える 3

1

jQueryのバージョンを更新した後、コードを正常に実行しました。on()関数はバージョン1.7で導入されました。次のコードが機能しました。変数をblah.phpに渡し、それらを返し、アラートにエコーアウトしました。

$(document).ready(function(){
    jQuery(".deletebutton").on("click", function(event) {
        if (confirm("Are you sure you want to delete?")){
            jQuery.ajax({
                url: 'blah.php?option=com_recordings&task=deletevideos&format=raw',
                type: "POST",
                success: function(data){
                    alert(data);
                }
            });
        }
    });
});

これがblah.phpです:

<?php
echo $_GET['option'].' '.$_GET['task'].' '.$_GET['format'];

bodyタグの内容は次のとおりです。

<body>
    <form name="myform" action="">
        <table id="webcam-table" class="pretty">
            <thead>
            <tr>
                <th>Camera Name</th>
                <th>Date Created</th>
                <th>Video Size</th>
                <th>Video Length</th>
                <th>
                    <input type="checkbox" name="checkboxselectall" title="Select All" />
                    <button class="deletebutton" title="Delete the selected videos" >Delete</button>
                </th>
             </tr>
             </thead>
         </table>
    </form>
</body>
于 2013-01-02T22:19:25.043 に答える
1

私は過去数時間これに苦労しました。私はこの投稿に出くわしました。完全に解決されたようには見えません...あなたは実際に私に答えを教えてくれました...

デフォルトでは、<button>は<input type = "submit>と同じです。これは、ボタンがフォームを送信しようとしていることを意味します。ボタンをフォームの外に移動したときに、自分でそのボタンに手がかりを付けました。

つまり、ボタンをクリックするとすぐに、ボタンハンドラーが開始され、ajax呼び出しが実行されます。その後、ボタンハンドラーは、ajax呼び出しがデータを返す前に終了します。したがって、送信ハンドラーが実行されます。ajax呼び出しからデータを取得する前に、ページが送信されることになります。ajax呼び出しはこれを検出し、中止します。中止するとエラー関数が実行されますが、適切なデータがないため、エラーコードはゼロ(0)です。

これがFFやChromeではなくIEで機能する理由は、IEがボタンハンドラーを処理する方法の問題である可能性が最も高いです。

解決策は、送信ハンドラーがpreventDefaultで実行されないようにすることです。したがって、コードは次のようになります...

$(document).ready(function(){
    jQuery(".deletebutton").on("click", function(event) {
        event.preventDefault();
        event.stopPropagation();

        if (confirm("Are you sure you want to delete?")){
            jQuery.ajax({
                url: 'blah.php?option=com_recordings&task=deletevideos&format=raw',
                type: "POST",
                success: function(data){
                    alert(data);
                }
            });
        }

        return false;
    });
});
于 2013-04-09T08:14:22.837 に答える
0

ねえ、実際にはこれはクロスドメインの問題なので、セキュリティの問題のため、一部のajaxはChromeで機能しません。

Chromeでは、次の手順を使用してWebセキュリティを手動で無効にすることでこれを実行できます

  1. コマンドプロンプトを開く(実行> cmd)
  2. 次のコマンドを入力します

    "C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-web-security
    

ノート

  1. このコマンドを実行すると、Chromeが閉じます。
  2. C:\Program Files\Google\Chrome\Application\chrome.exeこれを、インストールしたchrome.exeのパスに置き換えることができます

このコマンドを実行した後、クロスドメインの問題がある場合にajaxが実行されるchromeが開きます。

于 2013-02-06T07:15:37.463 に答える