3

我发现我的 JS 两次向我的 PHP 文件发送 POST 方法,这就是为什么我不断从我的 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 结果。

 //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 方法

4

3 回答 3

0

几件事要尝试:

1)确保您绑定和取消绑定您的按键事件

2) 使用全局变量确保一次只发送一个 ajax 请求

IE:

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 方法现在执行一次。虽然我不能从技术上真正解释它为什么起作用。

于 2013-10-26T10:55:59.750 回答