我试图制作一个动态文档预览器。用户可以输入某些文档标题选项,并根据其帐户信息生成一个带有动态标题的文档。我最终希望预览完整的pdf,但我现在正在处理标题。发布数组缺少来自ajax请求的json
我想要做的是制作一个页面,用户可以填写表单,然后按下按钮预览标题。
$.ajaxSetup({
type: 'POST',
timeout: 10000
});
$("#preview_header").click(function(){
var full_url = //appropriate URL
var preview_data = {
"wsid": "default",
"page": "default",
"banner_area1": "default",
"banner_area2": "default",
"banner_area3": "default",
"uid": "default",
"fid": "default",
"cid": "default",
"assignment_type": "default"
};
preview_data.wsid = $("#worksheet_picker").val();
preview_data.page = $("#page_picker").val();
preview_data.banner_area1 = $("#banner_area1").val();
preview_data.banner_area2 = $("#banner_area2").val();
preview_data.banner_area3 = $("#banner_area3").val();
preview_data.uid = $("#member_uid").val();
preview_data.fid = $("#family_id").val();
preview_data.assignment_type = 'family';
preview_data.cid = $("#class_id").val();
var JSONText = JSON.stringify(preview_data);
alert('Full JSON - ' + JSONText);
$.ajax({
async: true,
url: full_url,
data: { previewInfo : JSONText }, //Passes necessary form information
dataType: 'json',
success: function(output){
var reply = output;
if (reply.status == "success"){
$("#preview").attr("src", reply.image);
} else {
alert('Failed to create image preview of the assignment.');
}
}
});
});
据我所知,上述方法工作正常。它击中正确的Codeigniter页面,当ajax方法设置为返回硬编码图像时,它工作得很好。阿贾克斯似乎得到了很好的格式,但万一这里是它输出,当我填写表格相应的值:
Full JSON - {"wsid":"4","page":"1","banner_area1":"link1",
"banner_area2":"link2","banner_area3":"link3",
"uid":"1","fid":"1","assignment_type":"family"}
所以第一关,让我们先从什么是在相应的控制器方法工作的AJAX回复:
$data = array(
'status' => 'success',
'image' => //static image link
);
$this->output->set_content_type('text/javascript;charset=UTF-8');
echo json_encode($data);
但每当我试图修改它,像这样:
$preview_data = json_decode($this->input->post('previewInfo'));
//Got this one
mail('[email protected]', 'Start Email', 'Some email');
//Empty email
mail('[email protected]', 'Dump Post', var_dump($_POST));
//Empty email
mail('[email protected]', 'Post data', var_dump($preview_data));
//returns an email with 1 for body
mail('[email protected]', 'Post data', print_r($this->input->post()));
//returns an email with 1 for body
mail('[email protected]', 'Post data',
print_r($this->input->post('previewInfo')));
//returns an email with 1 for body
mail('[email protected]', 'Post data', print_r($preview_data));
$data = array(
'status' => 'success',
'image' => //static image link
);
$this->output->set_content_type('text/javascript;charset=UTF-8');
echo json_encode($data);
修改后的一个不要么返回静态数据。所以看起来post数组没有正确初始化。任何人都看到错误?
'var_dump'只能输出到浏览器,除非使用输出缓冲。 'print_r'有第二个参数,允许你将返回值作为返回值返回,而不是返回给浏览器。 Anyhoo,因此,您的返回值不是有效的JSON,这可能会阻止您的Ajax成功回调正常工作。如果你也设置了'error'回调,它应该会因此而触发。根据@ Austin的建议,您应该使用Firebug或Chrome开发者工具来查看发送和接收的内容。 – Gavin 2012-07-19 14:23:29