AJAX + jQuery变量无法传递到PHP

3

我想做一件非常简单的事情:将2个文本变量传递给一个php脚本,并将它们插入到MySQL数据库中。但出于某种原因,我无法让变量传递(所以我只得到空记录在我的数据库中)。

function ajaxCall(){
 
        $.ajax({
            type: "GET",
            url: "http://www.*.be/bubblingAjax.php",
            cache: false,
            data: "colour="+colour+"&size="+size,
        dataType: "html",
            success: onSuccess
        });
        return false;
    };

同时还有PHP代码:

<?php
    try
    {
        $connection = mysql_connect("#");
        mysql_select_db("#");

        $colour = mysql_real_escape_string($_GET['colour']);
        $size = mysql_real_escape_string($_GET['size']);
        
        mysql_query("INSERT INTO bubble (colour, size) VALUES ('$colour', '$size')");
        mysql_close($connection);
        echo "SUCCESS";
        echo $colour;
        echo $size;
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
?>

有没有人愿意快速查看并指出我的 - 可能很明显的 - 错误?这个问题已经困扰我一整天了。

mysql_select_db("#); 你忘记了一个引号。或者这是一个错误吗? - Alex Pliutau
1
啊,我在审查时刚刚把它拿掉了,但在部署的脚本中是正确的 ;) - user775060
使用Firebug或类似的工具。检查Ajax请求的头部,以查看您的错误是否不在JavaScript中。您还可以在$.ajax()块之前执行“alert(size)”等操作。 - Raveline
在ajaxCall中,颜色和大小变量在哪里设置?你确定它们甚至包含一个值吗?你尝试过像Firebug的Net选项卡或HTTP代理这样的基本工具来查看实际发送了什么吗? - Ben
它在alert()中正确地警报了我的变量。 - user775060
4个回答

0

这必须运行:

<script type="text/javascript">
$(document).ready(function() {
   //you can wrap the code into an event, e.g click()
   var colour=...
   var size=...
   $.post("http://www.website.com/bubblingajax.php", { colour: colour, size: size },
   function(data) {
     alert("Respond: " + data);
   }); 
});

</script>

并且 PHP(仅将 get 更改为 post)

<?php
    try
    {
        $connection = mysql_connect("#");
        mysql_select_db("#");

        $colour = mysql_real_escape_string($_POST['colour']);
        $size = mysql_real_escape_string($_POST['size']);

        mysql_query("INSERT INTO bubble (colour, size) VALUES ('$colour', '$size')");
        mysql_close($connection);
        echo "SUCCESS";
        echo $colour;
        echo $size;
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
?>

另外,为了调试,我建议使用Firebug或Chrome内置的检查工具。


会尽快尝试。调试的问题在于它只是嵌入在一个更大的应用程序中运行在手机上的一个小部分(因此没有Chrome或Firebug)。 - user775060

0

在 test.php 文件中测试此代码(文件名很重要):

<?PHP 
if(isset($_POST['user_name']))
{ 
$post_output=
'Hello '.strtoupper($_POST['user_name']).' from '.strtoupper($_POST['user_city']).'!

This is an other random:'.rand(23,46).'.

The previous random is still alive!

I guess you can insert these 2 values 
in the database on your own now, don\'t you?!';


$get_output=
'


___________________________________________
Well if you insist you can keep using get on parallel
This is what $_GET says:

'.strtoupper($_GET['getMessage']).'

And finally you can avoid post at all, to do that:
1.Use get instead of post inside the insertToDB function
2.Use send(null) instead of send(params)
3.Don\'t send the headers

HOWEVER I LIKE POST!';
echo $post_output;
print $get_output;
exit;
}
?>

<html>

<head>

<script language="javascript" type="text/javascript"  >
<!--

var request = false;
try { 
  request = new XMLHttpRequest(); 
} catch (trymicrosoft) {                         
  try { 
    request = new ActiveXObject("Msxml2.XMLHTTP"); 
  } catch (othermicrosoft) {
    try {
      request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (failed) {                  
      request = false;       
    }
  }
}

if (!request) 
  alert("Error initializing XMLHttpRequest!"); 

   function insertToDB() 
   { 
        var url = "test.php?getMessage=Hi%20There!%20Use%20me%20if%20you%20like..";
        var params = "user_name=" +  (document.getElementById("user_name").value)+ 
        "&user_city="+(document.getElementById("user_city").value);

        request.open("POST", url, true); 

        request.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
        request.setRequestHeader("Content-length", params.length);
        request.setRequestHeader("Connection", "close");

        request.onreadystatechange = updatePage;
        request.send(params);

   }////////////////////

   //You're looking for a status code of 200 which simply means okay.
   function updatePage() {
     if (request.readyState == 4) {
       if (request.status == 200) 
       { 
       //alert(decodeURIComponent(request.responseText));

             alert(request.responseText);
       } 
       else{
         //alert("status is " + request.status);
         }
     }
   }


// -->
</script>
</head>

<html>
<body>

This is a random:<?PHP echo rand(1,23);?><br>


<input type="text" name="name" value="your name here"  size=80 id='user_name'   ><br>
<input type="text" name="city" value="your city goes here"  size=80  id='user_city'  ><br>
<input type="submit" name="bttn" value="Go" onClick="insertToDB( );" > 




</body>
</html>

0

“数据”参数发送为POST变量而不是GET变量。 请在PHP中尝试使用$_POST。


数据参数在GET请求中不作为POST发送。JQuery实际上足够聪明,可以将数据值转换为查询字符串参数。 - Ben

0

在手机上运行

我不确定我的上面的脚本是否适用于手机,它需要启用JavaScript!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接