AJAX调用[object%20Object]而不是URL(Symfony)

时间:2018-04-24 13:32:55

标签: javascript ajax symfony url routing

在twig中,我使用do { audioPlayer = try AVAudioPlayer(contentsOf: YourURL) audioPlayer?.delegate = self audioPlayer?.play() } catch let error { print("audioPlayer error: \(error.localizedDescription)") } ,因此我可以使用data-post-url="{{ path('ajax')}}"

在javascript中获取网址

然而,不是去http://localhost/happysaucer/web/app_dev.php/ajax而是去 http://localhost/happysaucer/web/app_dev.php/profile/[object%20Object]

这很奇怪,因为当我在console.log(路径)的路径上变量它返回正确的URL。当我对网址进行硬编码时,路径就是“变量返回ajax调用就像应该的那样。

AJAX电话:

var path = $("#edit-url-js").data();

控制器操作

$(document).ready(function(){

var path = $("#edit-url-js").data();

$(".option-js").on("change", function() {

    $.ajax({
        url: path,
        type: "post",
        data: "test",
        success: function(data) {

        }
    });

});
});

Twig代码

/**                                                                                   
* @Route("/ajax", name="ajax")
*/
public function ajaxAction(Request $request)    
{

    $r = new JsonResponse();

    return $r->setData([
        'success' => true,
    ]);
}

1 个答案:

答案 0 :(得分:1)

在执行console.log(路径)时获取正确的URL真的很奇怪,但是由于上下文的原因,它可能会从您调用它的位置发生变化,可能存在全局路径变量在哪里?

无论如何,有3种方法可以正确获取该网址:

jQuery的:

var path = $("#edit-url-js").data("post-url")
var path = $("#edit-url-js").attr("data-post-url")

Pure Javascript:

var path = document.getElementById("#data-post-url").getAttribute("data-post-url")

但我建议你把URL放在你的选项事件上,使其成为该选项的独家选择,只要你想要它是独家的,例如:

$(document).ready(function() {
    $(".option-js").on("change", function() {
      var $optionElement = $(this)
        $.ajax({
          url: $optionElement.data("post-url"),
          type: "post",
          data: "test",
          success: function(data) {
          }
        });
    });
});