ajax成功但不发送帖子数据

时间:2012-05-17 16:33:57

标签: php javascript jquery mysql

嗨,我有这个简单的代码:

var datastring="123";
$.ajax({ 
        url: 'actualizarimagen.php',
        type: 'post',
        dataType: 'text',
        data: datastring,
        cache: false,
        success: function(response){
            $('.msg1').html(response);

         },
        error: function(response){
            $('.msg1').html(response);
         }

    });

并且在actualizarimagen.php中:

$desc_larga = print('<pre>') & print_R($_POST) & print('</pre>');
$insertSQL = sprintf("INSERT INTO prueba (texto) VALUES ($desc_larga)");

我收到成功消息,但在数据库中总是保存1.我尝试更改所有内容,dataType,成功,错误,完成功能但它不起作用。我正在寻找,但任何答案都无法帮助我。

感谢。

编辑:添加回复

7 个答案:

答案 0 :(得分:5)

您的datastring应包含编码为application/x-www-form-urlencoded

的数据

例如:var datastring="foo=123";

最好不要将字符串传递给jQuery。传递一个对象,让它为你处理编码。

例如:data: { "foo": "123" }

答案 1 :(得分:1)

发送数据,有格式要遵循。 像

var datastring="var1=123&var2=abcd";

var datastring=[{name:'var1',value:123},{name:'var2',value:'abcd'}];

第二种格式(对象名称值数组)类似于<input type="text" name="var1" value="123">,其中html输入元素具有要发布的名称和值。

然后,您可以通过以下方式获取值:

$_POST['var1']  

$_POST['var2']  

答案 2 :(得分:1)

数据 Object,String

要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。

您只是将123发送到服务器。

应该是

var datastring="myField=123";

var datastring = {"myField" : 123 };

使用PHP,你会读到它

$_POST["myField"]  

答案 3 :(得分:1)

轻松实现这一目标的一个例子可能是:

<强> JS:

var datastring="123";

$.post('actualizarimagen.php', { datastring:datastring }, function(data){
     if(data != 0){
        $('.msg1').html('correcto');
     } else {
        $('.msg1').html('error');
     } 
});

在您的actualizarimagen.php中:

if($_POST() && isset($_POST['datastring'])){

/* Connect to DB */
$link = mysql_connect('server', 'user', 'pwd');
if (!$link) {
    // No connection
    print(0);
    exit();
}

$db = mysql_select_db('db', $link);
if (!$db) {
    // DB selection error
    print(0);
    exit();
}

/* Sanitize the value */
$datastring = mysql_real_escape_string($_POST['datastring']);

// I don't understand here what you tried to do with $dec_larga but this is what I thought
$desc_larga = "<pre>".$datastring."</pre>";

/* Insert to DB */
$sql = "INSERT INTO prueba (texto) VALUES ('$desc_larga')";

if(mysql_query($sql,$link)){
    // Everything is Ok at this point
    print(1);
} else {
    // Error happened in your SQL query
    print(0);
}

}

答案 4 :(得分:0)

在ajax电话中:

data: my_var : datastring,

在php中:

$desc_larga = '<pre>'.$_POST['my_var'].'</pre>';

答案 5 :(得分:0)

尝试替换

type: "post",

type: "POST",

并且您的数据字符串应如下所示:

single=Single&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio1

如下所述:

http://api.jquery.com/serialize/

答案 6 :(得分:0)

var datastring = "123";
$.ajax({ 
   url: 'actualizarimagen.php',
   type: 'post',
   dataType: 'text',
   data: {data : datastring},
   cache: false
}).always(function(response) {
   $('.msg1').html(response);
});

并且在actualizarimagen.php中:

$desc_larga = '<pre>'.$_POST['data'].'</pre>';
$query =  '"INSERT INTO prueba (texto) VALUES ('.$desc_larga.')"';