将php变量传递给ajax url

时间:2012-08-16 22:09:05

标签: php ajax variables

*更新

问题是有多个变量,我无法传递php回声。由于“冲突

,我不能只在php中运行脚本
<?php
.....other stuff

 $i=0;
 while ($i < $num) {

$id=mysql_result($result,$i, "StudentID");
$first=mysql_result($result,$i,"First");
$last=mysql_result($result,$i,"Last");
$date= date("Y.m.d");
echo "<div id=\"list\"><div id=\"id\">$id</div><div id=\"name\"> $first $last  
<button onclick=\"addHit($id,$first,$last,$classname,$day,$times,$date)\">Checkin</button></div></div>  ";

$i++;
}

echo"</div></div></div></div>";

?>
<script>
function addHit(id, first, last, classname, day, times, date)
{
$.ajax({
   type: "POST",
   url: "checkinuser.php",
   data: "id=id&first=first&last=last&classname=classname&day=day&times=times&date=date",
   success: function(msg){
     alert( "Data Saved: " + msg ); //Anything you want
   }
 });
}
</script>

6 个答案:

答案 0 :(得分:3)

正如其他人所提到的,你不能直接在HTML中使用PHP,因此你需要在PHP代码块中转义所有这些变量。如果这是我的代码,我会考虑重构一下,以便我可以使用JSON编码的参数,例如:

<?php
    $rawData = array('id'=>$id, 'first'=>$first, 'last'=>$last, ... );
    $hitData = json_encode($rawData);
?>

<button onclick="addHit(<?php echo $hitData ?>)">Checkin</button>

function addHit(inputData)
{
    $.ajax({
        type: "POST",
        url: "checkinuser.php",
        data: inputData
        success: function(msg) {
            alert( "Checked In! " + msg ); 
        }
    });
}

为了回应你的编辑,如果你想按照你的方式保留params,我会修改你的while循环:

<?php
$i=0;
while ($i < $num) {

    $id=mysql_result($result,$i, "StudentID");
    $first=mysql_result($result,$i,"First");
    $last=mysql_result($result,$i,"Last");
    $date= date("Y.m.d");
?>
<div id='list'>
    <div id='id'>
        <?php echo $id?>
    </div>
    <div id='name'>
        <?php echo "$first $last" ?>
        <button onclick='addHit( <?php echo "$id,$first,$last,$classname,$day,$times,$date" ?> )'
            Checkin
        </button>
    </div>
</div>

<?php 
    $i++;
}
?>

这里的目标是使其更易于读/写,因此尽可能将静态代码(例如HTML)与动态代码分离可能是一件好事。一个很大的优点是你不必担心像你一样逃避引用,但缺点是有相当数量的<?php>块。

另请注意,您为所有这些div设置了id ='id',这不起作用,因为当id在给定页面上需要唯一时,它们将共享一个id。你可能也想echo $id

同样,没有理由让echo"</div></div></div></div>"; - 将其移到PHP块之外,只留下HTML。

最后,在你的javascript中,你的数据参数是文字字符串:

"id=id&first=first&last=last&classname=classname&day=day&times=times&date=date"

这不起作用,因为id确实是'id',首先是'first'等等。

您需要使用我上面的方法(传递整个参数的位置),或者构建要作为数据参数传递的对象。 .ajax()会接受对象,所以我会把它作为一个对象,然后通过它,例如:

function addHit(id, first, last, classname, day, times, date)
{
inputData = { id: id, first: first, etc, etc}
$.ajax({
   type: "POST",
   url: "checkinuser.php",
   data: inputData,
   success: function(msg){
     alert( "Data Saved: " + msg ); //Anything you want
   }
 });
}

答案 1 :(得分:2)

数据看起来不一样:

data: "id="+id+"&first="+first+"&last="+last+"&classname="+classname+"&day="+day+"&times="+times+"&date="+date,

您还可以使用以下格式:

data : { id : id, first : first, last : last, classname : classname, day : day, times : times, date : date }

再加上mimiz说的话。

答案 2 :(得分:0)

您无法直接将PHP变量插入其他代码中。试试echo

<button onclick=\"addHit('<?php echo $id.","$first.",".$last.",",$classname.",".$day.",".$times.",".$date; ?>')\">Checkin</button>

答案 3 :(得分:0)

试试这个:

<button onclick=\"addHit(<?php echo " '$id', '$first' ,'$last','$classname','$day', '$times','$date'"; ?>)\">Checkin</button>

的问候;

mimiz

答案 4 :(得分:0)

尝试更改此内容:

type: "POST",

为此:

type: "GET",

你应该通过GET传递变量并在你的PHP代码中接收它们,因为它是通过url传递的。

答案 5 :(得分:-1)

addHit( '$ ID,$第一,$最后,$类名,$天,$次,$日期') 一定是 addHit($ ID,$第一,$最后,$类名,$天,$次,$日期)

(tnx to Musa)

数据:“id = id&amp; first = first&amp; last = last&amp; classname = classname&amp; day = day&amp; times = times&amp; date = date” 一定是 数据:“id = $ id&amp; first = $ first&amp; last = $ last&amp; classname = $ classname&amp; day = $ day&amp; times = $ times&amp; date = $ date”