将参数从jquery传递给php

时间:2015-02-05 11:35:34

标签: php jquery mysql ajax

我有这个jquery脚本

$(function() { // <----doc ready starts
    $("#btn1").click(function(e) {
        e.preventDefault();
        var name = $("#id1").val(); 
        var last_name = $("#id2").val();
        var dataString = {'name=':name, 'last_name': last_name};
        $.ajax({
            type: 'POST',
            dataType: 'jsonp',
            url: 'http://localhost/insert.php',
            success: function(data) {
                alert(data);
            }
        });
    });
});

这个php从第一个脚本插入参数到mysql数据库:

<?php
    $conn = mysqli_connect('localhost', 'root', '');
    $name = $_POST['name'];
    $last_name = $_POST['last_name'];
    $mysqli = new mysqli('localhost','root','','os');

    if ($mysqli->connect_error) {
        die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    }
    $insert_row = $mysqli->query("INSERT INTO table_info (name, name2) VALUES($name, $last_name)");

    if ($insert_row){
        print 'Success! ID of last inserted record is : ' .$mysqli->insert_id .'<br />'; 
    }
    else {
        die('Error : ('. $mysqli->errno .') '. $mysqli->error);
    }
    $mysqli->free();
    $mysqli->close();
?>

当我试图运行它时,它失败并出现错误:

  

注意:未定义的索引:第3行的C:\ wamp \ www \ insert.php中的名称       注意:未定义的索引:第4行的C:\ wamp \ www \ insert.php中的last_name
      错误:(1064)您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在&#39;附近使用。 )&#39;在第1行

这里有什么问题,对不起愚蠢的问题,这是我第一次使用php和jQuery。

5 个答案:

答案 0 :(得分:5)

您没有向AJAX调用提供dataString变量,因此不会发送任何数据。您需要将其添加到data的{​​{1}}属性中:

$.ajax

请注意,我还修复了对象定义中的$("#btn1").click(function(e) { e.preventDefault(); var name = $("#id1").val(); var last_name = $("#id2").val(); var dataString = { 'name': name, 'last_name': last_name }; $.ajax({ type: 'POST', dataType: 'jsonp', url: 'http://localhost/insert.php', data: dataString, success: function(data) { alert(data); } }); }); 拼写错误。

答案 1 :(得分:1)

生成有效的dataString。尝试使用 -

var dataString = "{'name=':"+name+", 'last_name': "+last_name+"}";

并将其传递给电话 -

$.ajax({
    type: 'POST',
    data: dataString,
    dataType: 'json',
    url: 'http://localhost/insert.php',
    success: function(data) {
        alert(data);
    }
});

答案 2 :(得分:1)

您正试图从$_POST读取,但您正在提出GET请求。

根据规范,JSONP 始终 GET。您无法使用该技术发出POST请求。

由于您说type: 'POST',

dataType: 'jsonp',将被忽略


您还尝试阅读name,但您已拨打了您的字段name=。您需要在整个过程中使用相同的名称。


当您收到回复时,您将收到错误,因为您的PHP脚本没有使用JSONP进行响应。

你需要header("Content-Type: application/javascript");,然后是:

echo $_GET['callback'] . "(" . json_encode($your_response) . ");";

...但您应该通过清理回调名称来为the Rosetta vulnerability添加保护。


或者,删除dataType: 'jsonp',并将header("Content-Type: text/plain");添加到PHP。

答案 3 :(得分:0)

在此行之后:键入:'POST',添加以下行:data:dataString,

答案 4 :(得分:-2)

`enter code here`try to change the ajax call like this
`enter code here`$(function() { // <----doc ready starts
   `enter code here` $("#btn1").click(function(e) {
      `enter code here`  e.preventDefault();
        var name = $("#id1").val(); 
        var last_name = $("#id2").val();
        var dataString = {'name=':name, 'last_name': last_name};
        $.ajax({
            type: 'POST',
            dataType: 'jsonp',
            url: 'http://localhost/insert.php',
            data: JSON.stringify(dataString),
            success: function(data) {
                alert(data);
            }
        });
    });
});