2013-10-26 16 views
2

我發現我的JS發送POST方法兩次到我的PHP文件,這就是爲什麼我不斷從我的PHP獲得雙/重複結果。ajax發送POST兩次,接收來自PHP的雙重/重複結果

enter image description here

這個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結果。

//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後繼續發送帖子方法兩次

+0

請確保您不要定期按下多個鍵...... –

+0

甚至沒有理由甚至沒有PHP腳本。 YouTube的API接受JSONP回調。 – Blender

+0

我也遇到過這個問題。但我的只是在鉻。在FF中,歌劇只有單一的要求。找不到任何解決方案,所以我改變了整個設計。 -_- – itachi

回答

0

幾件事情嘗試:

1)確保您綁定和解除綁定你的鑰匙了事件

2)使用全局變量,以確保只有一個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)嘗試檢查輸入字段的內容發生了變化這樣做

0

您應該向我們展示.keyup()事件的代碼,可能這是錯誤的地方。事件處理程序可以爲ajax執行包裝函數,而不是直接執行ajax。例如,如果您觸發了鍵入事件,請嘗試檢查輸入內容是否已更改。如果是這樣,運行阿賈克斯,如果不是 - 什麼也不做。

+0

嗨,我更新了我的上面的代碼,包括'.keyup()'事件。 – bobbyjones

0

coverted這

$.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方法現在正在執行一次。雖然我不能真正解釋爲什麼它的工作原理。