2011-11-25 20 views
1

我有一个表单,我需要通过AJAX发送数据。整个想法一旦选择了表单数据,通过jQuery.get()发送的ajax调用将调用另一个函数,该函数接收并解码PHP中的数据,并将该数据用作id以从数据库获取更多数据。然后将数据库中的数据重新编码并发送到一个javascript函数,该函数根据传递的内容打印更多数据。Ajax拒绝在非常奇怪的情况下发送数据

我的问题是,我随时在参考$_GET$_POST使用<?php ?>标签在javascript函数,我得到一个错误告诉我,我的javascript函数是未定义的。我知道这是部分,至少,因为当我删除$_GET/$_POST superglobal AJAX调用确实发送。

任何帮助,这将不胜感激。

这里是我的代码:

jQuery.noConflict();   

function printSubCategories(categories) { 

    for (var i = 0; i < categories.length; i++) { 

     var opt = document.createElement('option'); 

     opt.text = categories[i]['name']; 
     opt.value = categories[i]['id']; 

     jQuery('#subcategories').append(opt); 
    }  
} 

function recieveAndPrint() { 
<?php 
    $categories = getCategories(json_decode($_GET['parent'])); 
?> 
    printSubCategories(<?=json_encode($categories)?>); 
} 

function ajaxCategories(pathToFile, ajaxData) { 
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(ajaxData) { 
     //alert('Data loaded: ' + ajaxData + <?=json_encode($_POST)?>); 
    }); 

    recieveAndPrint(); 

} 
+0

您确定在您的动态输出函数中没有发生javascript编译错误。这肯定会导致你所描述的行为?你能给我们在错误情况下的js输出吗? – j0tt

回答

2

我怀疑你感到困惑的AJAX是如何工作的。看起来您期望AJAX调用可以与位于同一页面上的PHP一起工作,而页面只加载一次。这不准确;你需要的是在服务器上调用的另一个php页面,该页面将数据作为JSON返回到原始页面。您的回调也存在问题,因为在调用receiveAndPrint()之前数据不会准备好;它需要在回调中调用(但由于接收部分已经完成,所以它只会在打印)。

比方说,你有两个PHP文件,a.php和b.php。第一个将用于显示初始页面,并将调用第二个来检索特定实例parent的新数据。

a.php只会

jQuery.noConflict();   

function printSubCategories(categories) { 

    for (var i = 0; i < categories.length; i++) { 

     var opt = document.createElement('option'); 

     opt.text = categories[i]['name']; 
     opt.value = categories[i]['id']; 

     jQuery('#subcategories').append(opt); 
    }  
} 


function ajaxCategories(pathToFile, ajaxData) { 
    jQuery.get(pathToFile, {'parent' : ajaxData}, function(data) { 
     printSubCategories(data); 
    }); 
} 

称为

ajaxCategories('/b.php','value_of_parent'); 

b.php

<?php 
    $categories = getCategories(json_decode($_GET['parent'])); 
    header('Content-type: application/json'); 
?> 
<?=json_encode($categories)?> 

您可能还希望确保响应不被缓存。

header('Cache-Control: no-store'); 
+0

谢谢,这是一个巨大的帮助。但是,我需要确保传递给其他表单的数据能够恢复到传递的原始表单。我将如何做到这一点?我是否需要在我的b.php文件中放置一个ajax javascript函数,它会以某种方式将编码后的数据传递回a.php? – zeboidlund

+0

不,第二个php文件只传递数据。它将作为jQuery get函数的回调函数中的data参数接收。这是在客户端上运行的部分,用于接受来自第二个正在调用的PHP文件的数据。 – tvanfosson

+0

好的,非常感谢! – zeboidlund