3

JS が POST メソッドを PHP ファイルに 2 回送信することがわかりました。これが、PHP から二重/反復的な結果を取得し続ける理由です。

ここに画像の説明を入力

この JS イベントは.keyup()、ajax を実行します。

    $(document).ready(function() {  
    var getUrl = $('#url');
    var youtube = regex here
    var web = regex here    

        getUrl.keyup(function() {

        if  (youtube.test(getUrl.val())) {
        var youtube_url = getUrl.val().match(youtube)[0];
        $.ajax ({
                type:"POST",
            url:"getyoutube.php",
            data: {youtube_url:youtube_url},
            success: function(html) { $('.echotest').append(html); }
        }); }

    else if (web.test(getUrl.val())) {
        var extracted_url = getUrl.val().match(web)[0];                 
                    $.post("curl_fetch.php?url="+ extracted_url, {
                }, function(response){
           $('#loader').html($(response).fadeIn('slow'));
           $('#cur_image').val(1);
        });} 
    }); 
}); 

データは によって受信されgetyoutube.php、特定の youtube ビデオの json 結果を1 回だけ出力する必要があります。

 //some code ommitted
 $youtube ="https://gdata.youtube.com/feeds/api/videos/'.$matches[0].'?v=2&alt=jsonc";
 $curl = curl_init($youtube);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $return = curl_exec($curl);
 curl_close($curl);
 $test = json_decode($return, true);
 print_r($test);

私の AJAX 投稿が POSTS メソッドを 2 回送信し続ける理由がわかりません

4

3 に答える 3

0

試してみるいくつかのこと:

1)キーアップイベントをバインドおよびバインド解除していることを確認してください

2) グローバル変数を使用して、一度に 1 つの ajax リクエストのみが送信されるようにします。

すなわち:

var ajaxrequest = false; //GLOBAL

function getyoutubedata(){

  if(ajaxrequest != false){
     return;  
  }

  ajaxrequest = $.ajax ({
        type:"POST",
        url:"./includes/getyoutube.php",
        data: {youtube_url:youtube_url},
        success: function(html) { $('.echotest').append(html); ajaxrequest = false; }
  });

}

ところで、YouTube API は jsonp コールバックをサポートしていることに注意してください。

3) 上記の関数を呼び出す前でも、入力フィールドの内容が変更されたかどうかを確認してみてください

于 2013-10-26T08:44:20.040 に答える
0

イベントのコードを表示する必要.keyup()があります。おそらく、それがエラーの場所です。イベント ハンドラーは、ajax を直接実行する代わりに、ajax のラッパー関数を実行できます。たとえば、keyup イベントがトリガーされた場合は、入力内容が変更されたかどうかを確認してみてください。ある場合は ajax を実行し、そうでない場合は何もしません。

于 2013-10-26T08:44:47.863 に答える
0

これを隠した

 $.ajax ({
       type:"POST",
       url:"getyoutube.php",
       data: {youtube_url:youtube_url},
       success: function(html) { $('.echotest').append(html); }
        }); }   

これに。

$.post("./includes/getyoutube.php?url="+ youtube_url, {
    }, function(response){
    $('.echotest').append(response);
    });

POST メソッドが 1 回実行されるようになりました。なぜそれが機能したのかを技術的に説明することはできませんが。

于 2013-10-26T10:55:59.750 に答える