-3

非常に小さな jquery ajax スニペットを作成するのに 2 時間を費やしましたが、これは機能せず、頭がおかしくなりました。何かが間違っていて、私はそれを見つけることができませんか? これをデバッグする方法が実際にはわかりません:

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
<script type="text/javascript">
$(function () {
    $('#subForm').submit(function (e) {            
        $.ajax({
            url: 'subscribe.php',
            type: 'GET',
            data: "id = " + 2,  //EDIT: I have changed this to "id=2", but also not working                  
            success: function(result){
                alert("token recieved: " + result);
            },
            error: function() {
                alert('Error occured!')
            },                  
        });
    });
});
</script>

subscribe.php は、直接呼び出された場合に機能します。

<?php  
   include "conf.php";      
   $email = 'test';
   $query = 'INSERT INTO subscribers(email) VALUES("'.$email.'")';
   mysql_query($query);

  echo 'Success';
  exit;    
?>

これにより、「エラーが発生しました!」というテキストが表示されます。その後、ページは「subscribe.php」にリダイレクトされます。最初に getjson を呼び出しましたが、うまくいかず、.ajax get に変更することにしました。

1) なぜエラーが発生するのですか?

2) その後 - エラーであっても、ユーザーが subscribe.php にリダイレクトされるのはなぜですか。これは ajax であり、ユーザーが同じページにとどまらないのはなぜですか?

EDIT return false を追加すると、ユーザーは subscribe.php にリダイレクトされません。これで解決です。

これは、データ「id=2」を変更することで解決されます。

4

4 に答える 4

1

にスペースがありますdata: "id = " + 2。また、e.preventDefault()

それは何をしますか?

スペースがある場合、リクエストが送信されるときにそのスペースもパラメーターの一部と見なされます。

お気に入り:id%20=%202

于 2013-02-25T14:54:10.297 に答える
1

あなたのjavascriptにエラーがあると思います。

data: "id = " + 2

代わりに試してください:

data: "id="+"2"

それ以外の場合は、数値 2 を文字列に追加しようとします。

于 2013-02-25T14:54:39.063 に答える
1
$.ajax({
    url: '/subscribe.php',
    type: 'GET', 
    data: "{id: 2}",
    dataType: "json",
    async: true,                   
    success: function(result){
        alert("token recieved: " + result);
    },
    error: function() {
        alert('Error occured!');
    },                  
});

PHP で、最初に $_GET をエコーするようにしてください。

javascript から送信された get with key 値を受け取っていることを確認してください。

于 2013-02-25T14:55:17.380 に答える
0

このようなものを使うほうが簡単ではないでしょうか?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#subForm').submit(function () { 
      window.open('subscribe.php?id='+id);
    });
  });
</script>

結果を現在のページに表示したい場合は、以下を参照してください。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>      
  $(document).ready(function() {
    $('#subForm').submit(function () { 
      $('<PUT THE DIV ID/CLASS HERE>').load('subscribe.php?id='+id);
    });
  });
</script>

PS:OPがこれを使用しない理由を見落としている可能性があります。その場合は、私の答えを無視してください。

于 2013-02-25T18:12:24.733 に答える