2015-02-23 132 views
0

試圖讓jQuery發送一個textarea的內容來更新記錄,但它不會。當我更改textarea的值以便以數字開頭時,它會發送正常。我可以通過使用alert()來驗證內容是否已成功交給JS函數,但是它不會到達PHP文件。所有其他JS函數都可以正常工作jQuery/ajax不會發送發佈數據

編輯添加更多可能相關的代碼。

的Javascript:

<script> 
function add_vid(t) { 
    if ($('#vref').val().length <5) return; 
    var vref = $('#vref').val(); 
     $.ajax({ 
     type: 'POST', 
     url: 'inc/ajax.php', 
     data: { 'a':'add_vid', 't':'<?=$_SESSION['t']?>', 'vref':vref}, 
     beforeSend:function(){ 
     $('#add_vid_status').html('Adding...'); 
     }, 
     success:function(data){ 
      if (data == 'added') { 
      $('#add_vid_status').html('Added'); 
      $('#vid_list').prepend('<div align="center" class="vid">'+vref+'</div>'); 
      $('#vref').val(''); 
     } 
     else $('#add_vid_status').html('Error'); 
     }, 
     error:function(){ 
     $('#add_vid_status').html('Error'); 
     } 
    }); 
    } 
function del_vid(id) { 
    var confirmdel = confirm('Delete ?'); 
    if (confirmdel) { 
    $.ajax({ 
     type: 'POST', 
     url: 'inc/ajax.php', 
     data: { 'a':'del_vid', 't':'<?=$_SESSION['t']?>', 'id':id}, 
     success:function(data){ 
      if (data == 'deleted') { 
       $("#v"+id).hide(900); 
     } 
     }, 
     error:function(){ 
     //$("#"+msg_id+'_a').html('error'); 
     } 
    }); 
    } 
    return false; 
} 
function update_vid(id) { 
    vref = $("#update"+id).val(); 
    alert(vref); 
    $.ajax({ 
      type: 'POST', 
      url: 'inc/ajax.php', 
      data: { 'a':'update_vid', 't':'<?=$_SESSION['t']?>', 'id':id, 'vref':vref}, 
      success:function(data){ 
       alert(data); 
       if (data == 'updated') { 
        $("#if"+id).html(vref); 
      } 
      }, 
      error:function(){ 
      //$("#"+msg_id+'_a').html('error'); 
      } 
     }); 
     return false; 
} 
function move_vid(id,dir) { 
$.ajax({ 
     type: 'POST', 
     url: 'inc/ajax.php', 
     data: { 'a':'move_vid', 't':'<?=$_SESSION['t']?>', 'id':id,'dir':dir}, 
     success:function(data){ 
      pos = data.split('_'); 
      pos_from = pos[0]; 
      pos_to = pos[1]; 
      //$("#if"+id).hide(); 
      if ($("#pos"+pos_to).length) {//if the id2 is on page (and not on a different paginated page) - swap them on-screen 
       temp_html = $("#pos"+pos_from).html(); 
       $("#pos"+pos_from).html($("#pos"+pos_to).html()); 
       $("#pos"+pos_to).html(temp_html); 
       temp_html = null; 
      } 
      else $("#pos"+pos_from).html('<div>Video moved off page.<br> Reload to see the result.</div>'); 
      //$("#if"+id).fadeIn(400); 
     }, 
     error:function(){ 
     //$("#"+msg_id+'_a').html('error'); 
     } 
    }); 
    return false; 
} 
</script> 

HTML:

<textarea name="vref" cols="55" rows="3" id="vref" placeholder="Video embed code"></textarea> 
<input type="button" value="Add" onclick="add_vid('<?=$_SESSION['t']?>')"> <span id="add_vid_status"></span> 

<input type="button" value="update" onClick="update_vid(27)"> 
<textarea cols="65" rows="3" id="update27"><iframe src="http://player.vimeo.com/video/123456789?byline=0&portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></textarea> 

PHP代碼:

<? 
session_start(); 
if ($_SESSION['auth'] != 1 || $_POST['t'] != $_SESSION['t']) exit(); 
elseif (isset($_POST['a'])) { 
    require_once('cfg.php'); 
    db_connect(); 
    if ($_POST['a'] == 'add_vid' && strlen($_POST['vref'])>4) { 
     //ADDS VIDEO TO DB AND ECHOES "added" 
    } 
    elseif ($_POST['a'] == 'del_vid' && is_numeric($_POST['id'])) { 
     //DELETES VIDEO AND ECHOES "deleted" 
    } 
    elseif ($_POST['a'] == 'update_vid' && is_numeric($_POST['id']) && strlen($_POST['vref']>4)) { 
     $id = (int)$_POST['id']; 
     //echo 'PHP: '.$_POST['vref']; (here i can test if the argument reaches.) 
     $vref = mysql_real_escape_string($_POST['vref']); 
     $q = mysql_query("UPDATE `videos` SET `vref`='{$vref}' WHERE `id`={$id}") or die ('update error: '.mysql_error()); 
     if ($q) echo 'updated'; 
    } 
    // CODE GOES ON... 
} 
?> 
+0

[使用alert()退出故障排除。](http://stravid.com/en/stop-the-javascript-alert-madness/)。您是否在瀏覽器的控制檯中觀看了請求/響應? – 2015-02-23 16:51:54

+0

你可以在你的PHP環境中捕獲POST嗎?我認爲這可能是更多的問題,在後端解析什麼比在這裏發佈的ajax。 – 2015-02-23 16:56:55

+0

我可以確認POST沒有達到PHP環境。令我感到困惑的是,只需在整個iframe代碼前添加一個數字(我的內容)就可以工作了! – mustafa 2015-02-23 17:18:52

回答

0

放棄更新功能後,昨天當我想複製類似項目的代碼時,我注意到PHP代碼中檢查字符串長度的明顯錯誤:我寫了strlen($_POST['vref']>4)而不是strlen($_POST['vref'])>4。在 糾正後,它完美的作品。

0

你有一個錯字在你的Ajax數據對象:

't':'<?=$_SESSION['t']?>' 

您使用兩次相同類型的引號,所以Javascript認爲t是一個變量,並且不能識別它。改變你的報價是這樣修正錯誤,你的代碼被扔:

't':'<?=$_SESSION["t"]?>' 

Otherwhise,如果你意味着這是一個變量,你需要使用它如下:

't':'<?=$_SESSION["'+ t +'"]?>' 
+1

如果此答案無法解決您的問題,請在您的問題中添加更多信息,例如您的PHP代碼。 – 2015-02-23 16:54:24

+0

不應該在這裏迴應'$ _SESSION'變量嗎? – 2015-02-23 16:55:56

+0

@JayBlanchard''實際上是'echo'的[簡寫符號](http://php.net/manual/en/function.echo.php)。 – 2015-02-23 16:57:48