将数据通过.ajax()传递给PHP脚本的正确方法是什么?

时间:2011-05-12 03:56:55

标签: php jquery ajax

我正在尝试通过jQuery .ajax()将一段数据发送到PHP脚本,然后将其加载到div容器中。然后PHP脚本将使用这段数据运行,其内容将返回到上述div容器中。

最初,我编写了这段代码(如下所示),它在单击时成功添加了正确的元素,但无法正确命名它们,因为它没有将count_bucket变量传递给PHP。

    var count_bucket = 4;
    var loadPHP = "create_new_bucket.php";  
    $(".add_bucket").click(function(){
       count_bucket++;
       $("#tree_container2").append( $('<div id="bunch' + count_bucket + '">').load(loadPHP));
       return false;
    });

然后我将代码更改为此(如下所示),以尝试将count_bucket变量传递给PHP脚本。

var count_bucket = 4;
$(".add_bucket").click(function () {
    count_bucket++;
    var bucket_add = $.ajax ({
        type: "GET",
        url: "create_new_bucket.php",
        data: var count_bucket, 
        dataType: "json",
        async: false,
    }).responseText;
    $('#tree_container2').append( $('<div id="bunch' + count_bucket + '">').load(bucket_add)); 
});

PHP文件create_new_bucket.php如下所示:

<?php
   include_once "test_functions.php"; // include functions page
   $i = $_GET["count_bucket"]; 
   drawBunchNew($i);
?>

我不清楚.ajax()的哪个方面不正确。我怀疑我没有在PHP中正确收集变量,或者我使用不正确的语法将其传递给PHP文件。如果有人能帮我识别错误,我将非常感激。

* 更新 * ** * **

谢谢Tejs&amp; Tandu。我现在很清楚如何构建数据,但我仍然无法让整个jQuery工作。我把Tandu的建议改为使用.load()而改变我的PHP以使用POST来提取数据,但它仍然无法正常工作。

var count_bucket = 4;
$(".add_bucket").click(function () {
    count_bucket++;
    var bucket_add = $.load ("create_new_bucket.php", {count_bucket: count_bucket}, }).responseText;
    $('#tree_container2').append( $('<div id="bunch' + count_bucket + '">').load(bucket_add)); 
});

PHP就是:

<?php
include_once "test_functions.php"; // include functions page
$i = $_POST["count_bucket"]; 
drawBunchNew($i);
?>

我使用的最终工作jquery(最终PHP与上面相同):

    var count_bucket = 4;
    var loadPHP = "create_new_bucket.php";  
    $(".add_bucket").click(function(){
    count_bucket++;
    $("#tree_container2").append( $('<div id="bunch' + count_bucket + '">').load(loadPHP, {count_bucket: count_bucket}));
    return false;
    });

2 个答案:

答案 0 :(得分:1)

ajax请求的data属性将成为一个对象;把它想象成JSON:

{ data: var response }

无效的JSON。但是,您可以这样做:

data: { myKey: 'myValue', myKey2: 'myValue2' }

或者在你的情况下:

data: { count_bucket: 4 }

它会将data属性中包含的数据作为该名称值集的一部分发送到您的服务器。

答案 1 :(得分:0)

jQuery中ajax的数据需要作为查询字符串格式的字符串('key[]=value&key[]=value&key[]=value')或json对象({key: [value, value, value]})传递。我相信你所拥有的var会出现语法错误。您还需要指定密钥,因此data: {count_bucket: count_bucket}data: 'count_bucket=' + count_bucket应该这样做。

请注意,没有必要使用.ajax()。使用.load().post().get()通常会更好一些。在您的情况下,.load()应该可以正常工作。将数据作为第二个参数传递。

为什么不希望请求是异步的?请注意,dataType是返回值的数据类型,而不是您发送的数据类型。你收到了json吗? jQuery也可以正常猜测,如果你在php端设置标题,它会有很大帮助。 GET类型也是默认类型。

最后注意事项:使用.load()时,如果您将数据作为字符串传递,它将使用GET,但如果您将其作为对象传递,则使用POST。