2015-02-23 148 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