Подтвердить что ты не робот

Ajax собирается [object %20Object]

Я просто пытаюсь сделать простой запрос следующим образом:

    $('.asd').change(
        function () {
            $.ajax({
                url: 'http://127.0.0.1/folder/index.php/controller/action/integer',
                success: function(data){}
            });
        }
    );

Этот код пытается вместо этого перейти к http://127.0.0.1/folder/index.php/controller/[object%20Object] и получит 404. Куда он вытаскивает объект? Я использую простую строку.

4b9b3361

Ответ 1

Для меня проблема заключалась в том, что я использовал $.post вместо $.ajax.

// fails:
$.post({
    url: "/example/" + this.id,
    // ...
});

// works:
$.ajax({
    url: "/example/" + this.id,
    // ...
});

Ответ 2

ajax ожидает карту параметров. post ожидает одиночные параметры:

// fails:
$.post({
    url: "/example/" + this.id,
    // ...
});

// works:
$.post("/example/" + this.id);

Ответ 3

У меня была такая же проблема и выкопал все, ища ответа. К сожалению, этот вкладчик никогда не возвращался с одним. Моя была глупой ошибкой. по возвращении из Ajax, я использовал непреднамеренно имя моей переменной после зарезервированного слова. Вот что я имел:

$.post('/MyApp.php', { param: 'getLocation' },
  function(xml) {
    location=$(xml).find('Location');
  }
});

Закодировано таким образом, по возвращении из Ajax страница перенаправляется на http://myurl/[Object %20object], которая теперь имеет прекрасный смысл.

Разрешение: измените "location = $..." на "clocation = $..." Надеюсь, этот ответ поможет кому-то другому. Это сложно отлаживать.

Ответ 4

Для меня, работая в Play и используя jsRoutes, это было очень больно, чтобы понять.

Кажется, что Play (javaScript) без проблем выполнит Ajax GET, используя следующий синтаксис:

$.ajax(jsRoutes.controllers.MyController.ajax(inurlparam))
.done(function(data) {
  }).fail(function(data) {
  })

Однако (и вот эта неприятная часть)... Если вы хотите сделать POST, вам нужно сначала использовать метод absolutURL() по URL-адресу, чтобы получить ajax (или сообщение), чтобы не включать [object%20Object] в URL-адрес в пост-время. Никакая отладка URL-адреса или параметров формы, казалось, не указывала, что происходит и почему. Я просто буквально "догадался" об этом решении из явного разочарования. PS: Обратите внимание на скобки в конце absolutURL() - js люди мгновенно получат это значение "делать" функцию, а не просто передают мне дескриптор.

  var url = jsRoutes.controllers.MyController.ajaxPost(inurlparam).absoluteURL();
  var formData = $('#form').serialize();
  $.ajax({
    url: url,
    type: "POST",
    data: formData
  }).done(function(data) {
  }).fail(function(data) {
  })

Я отвечаю на это здесь, так как именно здесь Google ведет меня, когда я наконец понял, что это может быть не мое кодирование, которое вызывает проблему:)