2011-05-12 107 views
1

我试图通过jQuery .ajax()发送一段数据到PHP脚本,然后将其加载到div容器中。然后PHP脚本将运行这段数据,其内容将返回到上述div容器中。通过.ajax()将数据传递给PHP脚本的正确方法是什么?

最初,我写了一段代码(如下所示),它在单击时成功添加了正确的元素,但无法正确命名它们,因为它没有将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); 
?> 

我不清楚其中阿贾克斯的方面()不正确。我怀疑我没有在PHP中正确收集变量,或者我使用不正确的语法将它传递给PHP文件。如果有人能帮助我识别错误,我将不胜感激。

*UPDATE* ** * **

感谢TEJS & 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; 
    }); 
+0

哪个版本的jQuery?我很好奇,因为ajax在1.5版本中进行了重大改写。这里可能不会影响你。 – 2011-05-12 04:34:04

回答

1

Ajax请求的数据属性是要成为一个客体;认为它像JSON:

{ data: var response } 

是无效的JSON。然而,你可以做这样的事情:

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

或者在您的情况:

data: { count_bucket: 4 } 

它将包含在数据属性的数据发送到服务器,该名称值集的一部分。

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()。使用​​,.post().get()通常会更好一些。在你的情况下,​​应该正常工作。传递数据作为第二个参数。

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

最后说明:当使用​​时,如果您将数据作为字符串传递,它将使用GET,但如果将它作为对象传递,则使用POST。

+0

谢谢Tejs&Tandu。我很清楚如何构建数据,但我仍然无法使jQuery的全部工作。我采用了Tandu的建议来使用.load(),并将我的PHP更改为使用POST来提取数据,但仍无法正常工作。我现在的代码是: – 2011-05-12 14:52:11

+0

我已经发布了新代码的更新,我上面有 – 2011-05-12 15:01:27

+0

只是想通了。发布上面的最终工作代码。谢谢您的帮助。 – 2011-05-12 15:20:32

相关问题