ajax发送POST两次,从PHP接收双重/重复结果

我发现我的JS发送POST方法两次到我的PHP文件,这就是为什么我不断得到双重/重复的结果 我的PHP。</ p>

</ p>

这个JS事件,在 .keyup()</ code>后将执行ajax。</ p>

  $(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);
});}
});

});

</ code> </ pre>

getyoutube.php </ code>将接收数据,并且只应打印特定YouTube视频一次的json结果</ strong>。</ p>

  //省略了一些代码
$ youtube =“https://gdata.youtube.com/feeds/api/videos/'.$matches[0 ]。'?v = 2&amp; 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);
</ code> </ pre>

我似乎无法弄清楚为什么 我的AJAX帖子不断发送POSTS方法两次</ p>
</ div>

展开原文

原文

i found out my JS sends POST method twice to my PHP file, thats why i keep getting double/repetitive results from my PHP.

enter image description here

This JS event, upon .keyup() will execute an 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);
        });} 
    }); 
}); 

the data will be received by getyoutube.php and should only print json result of a particular youtube video once.

 //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);

i cant seem to figure out why my AJAX post keeps sending POSTS method twice

dtrhd2850
dtrhd2850 实际上,还要注意像“tab”和“ctrl”等键都是alzo键,即使它们没有直接改变某些东西。
大约 7 年之前 回复
duanpu5048
duanpu5048 我也遇到了这个问题。但我的只是铬。在FF中,歌剧只有单一请求。找不到任何解决方案,所以我改变了整个设计。-_-
大约 7 年之前 回复
doumeng3188
doumeng3188 没有理由拥有PHP脚本。YouTube的API接受JSONP回调。
大约 7 年之前 回复
doushuangai9733
doushuangai9733 确保你不要定期按多个键...
大约 7 年之前 回复

3个回答



要尝试的事情:</ p>

1)确保绑定并取消绑定密钥 事件</ p>

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

即:</ p>

  var ajaxrequest = false;  // GLOBAL 

function getyoutubedata(){

if if(ajaxrequest!= false){
return;

ajaxrequest = $ .ajax({
type:“POST”,
url:“./ includes / getyoutube.php”,
data:{youtube_url:youtube_url},
成功: function(html){$('。echotest')。append(html); ajaxrequest = false;}
});

}
</ code> </ pre>

顺便注意youtube api支持jsonp回调,所以你可能要考虑这样做</ p>

3)尝试在调用上面的内容之前检查输入字段的内容是否已经改变 功能</ p>
</ div>

展开原文

原文

Couple of things to try:

1) Make sure you bind and unbind your key up event

2) Use a global variable to make sure only one ajax request gets sent at once

i.e.:

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; }
  });

}

Btw thing to note the youtube api supports jsonp callbacks so you might want to consider doing this through that

3) Try to check if the content of the input field has changed even before calling the above function



您应该向我们展示带有 .keyup()</ code>事件的代码,可能就是错误的地方 。 事件处理程序可以为ajax执行包装函数,而不是直接执行ajax。 例如,如果触发了keyup事件,请尝试检查输入内容是否已更改。 如果是这样,运行ajax,如果不是 - 什么都不做。</ p>
</ div>

展开原文

原文

You should show us the code with the .keyup() event, probably that's the place of an error. The event handler could execute a wrapper function for the ajax, instead of the ajax directly. For example, if you the keyup event is triggered, try to check if the input content has changed. If so, run ajax, if not - do nothing.

dougekui1518
dougekui1518 嗨,我更新了上面的代码,包括.keyup()事件。
大约 7 年之前 回复



隐蔽了这个</ p>

  $ .ajax({
type:“POST” ,
url:“getyoutube.php”,
data:{youtube_url:youtube_url},
success:function(html){$('。echotest')。append(html);}
}); }
</ code> </ pre>

到此。</ p>

  $ .post(“./ includes / getyoutube.php?url =  “+ youtube_url,{
},函数(响应){
$('。echotest')。append(response);
});
</ code> </ pre>

POST方法现在正在执行一次。 虽然我无法从技术上解释为什么它有效。 </ p>
</ div>

展开原文

原文

coverted this

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

to this.

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

POST method is now being executed once. although i cant really explain technically why it worked.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐