我想要的是,当单击按钮时,它会调用 .ajax 请求以通过 url 将三个变量传递给操作,以使用更改的图像 src 字符串更新数据库。
我似乎无法成功执行 .ajax 请求。我收到了我设置的错误警报。
这是执行ajax的jquery
//click through multiple thumbs
$(".prev").click(function() {
$(this).parent().find(".thumb-container").find("div:last").insertBefore($(this).parent().find(".thumb-container").find("div:first"));
$(this).parent().find(".thumb-container").find(".thumb").removeClass("selected");
$(this).parent().find(".thumb-container").find("div:first").addClass("selected");
var selectedImage = $(this).parent().find(".thumb-container").find(".selected").find("img").attr("src");
var quiltPatchId = $(this).parent().parent().parent().parent().attr("id");
var CalendarOfEventsID = <?php print $CalendarOfEventsID ?>;
var briefsPatchId;
//update image to uploadedImage field
$.ajax({
url: "/cms.php/calendar-of-events/"+CalendarOfEventsID+"/entries/update-image/"+quiltPatchId+"/"+selectedImage,
dataType: "json",
success: function(data){
briefsPatchId = data.briefsPatchId;
},
error: function(jqXHR, textStatus, errorThrown){
alert("Oops! That image was not successfully updated.");
}
});
})
所以ajax应该在这里调用带有变量的url到routing.yml中:
calendar_update_image:
url: /calendar-of-events/:id/entries/update-image/:quiltPatchId/:selectedImage
param: { module: calendar_of_events, action: updateImage }
然后调用actions.class:
//update selected image
public function executeUpdateImage(sfWebRequest $request){
$briefsId = $request->getParameter('id');
$quiltPatchId = $request->getParameter('quiltPatchId');
$selectedImage = $request->getParameter('selectedImage');
$briefsPatch = Doctrine::getTable('CalendarOfEventsEntries')->find($quiltPatchId);
$briefsPatch['uploadedImage'] = $selectedImage;
$briefsPatch->save();
$this->briefsPatchId = $briefsPatch['id'];
}
然后我可以将一些数据传回模板updateImageSuccess.php
<?php
/*
* This page is only called via ajax, so no templating necessary; uses blank template
*/
$data = array('briefsPatchId' => $briefsPatchId);
echo json_encode($data);
?>
我有这个在另一个模板中工作,使用拖放,所以我想也许我只是错过了一些小东西。有没有办法调试 ajax 调用以查看它在哪里失败?
更新:
主要问题在于 symfony 缓存。清除后,它可以标识页面 url。现在的问题是成功通过url获取图像字符串。我已经使用它对其进行了编码
selectedImage = encodeURIComponent(selectedImage);
它修复了“/”,但扩展正在丢弃 url。这可能需要开始一个新问题。如果是这样,请告诉我。
更新
好的,我已经让它工作了,通过拆分和弹出图像,使其成功通过 url。我认为有更好的方法可以做到这一点,所以如果这是一种不好的方法,请让他们知道。
这就是现在的工作:
var selectedImage = $(this).parent().find(".thumb-container").find(".selected").find("img").attr("src");
var selectedImage = selectedImage.split('.');
var imagePath = selectedImage[0];
var imagePath = selectedImage[0].split("/").pop();
var imageExt = selectedImage[1];
所以我获取图像字符串,将扩展名拉到另一个 var 中,然后 split.pop 图像字符串位置以删除所有以前的文件夹。
我原来是uploads/images/my_image.jpg,现在分成两个var,分别是imagePath = my_image
and imageExt = jpg
,然后我通过url传递了这两个var
url: "/cms_dev.php/calendar-of-events/"+CalendarOfEventsID+"/entries/update-image/"+quiltPatchId+"/"+imagePath+"/"+imageExt,
并在动作中将它们拾起并重新组合在一起。