2015-10-30 2 views
0

Я хотел бы сделать запрос на отправку вместе с перенаправлением заголовка с помощью jQuery и Ajax. Обычно, когда форма отправляется, вы передаются на другую страницу, и данные, которые вы публикуете, следуют (таким образом, что я не понял). Это то, что я хочу выполнить с Ajax. Если я:Emulate form submit with jQuery/Ajax

$.ajax({ 
type: "POST", 
url: "https://hello/theurl", 
data: output, 
dataType: 'text', 
contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
success: window.location = "https://hello/theurl", 
error: function(requestObject, error, errorThrown) { 
     alert(error); 
     alert(errorThrown); 
    } 
}); 

..when Я перенаправлены на страницу, он просит не хватает данных- так что я думаю, что запрос пост не скоординированы вместе с заголовком перенаправлять таким же образом, как это находится на форме сообщения.

И запрос на сообщение также не выполнен: «Нет« Access-Control-Allow-Origin ». Я отправляю данные как «текст», который представляет собой строку со входами, объединенными в виде «a = b &». Я не избежал этой строки - возможно, мне следует использовать «encodeURI()» или что-то (это не URL-адрес)? Но почему одновременно выполняются «ошибка» и «успех», разве это не должно быть просто одно?

Я читал много примеров, используя метод .submit(), который активируется, когда пользователь нажимает кнопку отправки. Мой случай отличается: при отправке, загружается одна и та же страница, $ _POST проходит проверку PHP (на той же странице), затем запускается функция javascript. Поэтому я не думаю, что могу использовать функцию «submit()», так как она реагирует на нажатие кнопки «Отправить». Другой вопрос: смогу ли я имитировать этот клик для отправки через javascript?

+1

'success: window.location =" https: // hello/theurl ",' Вам не хватает обертывания анонимной функции вокруг обработчика. Таким образом, в вашем случае 'window.location' вызывается во всех случаях. И чтобы имитировать форму submit, просто наберите 'submit()' DOM метод на узле (вы также можете использовать jq-метод, если вы не привязываете никакого обработчика jq, предотвращающего поведение отправки) –

+0

Полезно знать, спасибо. – Galivan

ответ

1

Что вы делаете в своем коде AJAX там (после фиксации функции успеха): вы вызываете страницу «theurl» дважды, сначала в POST с данными, а затем, когда это делается, вы goint to it снова в GET без данных. Если вы хотите, чтобы вас перенаправили на этот url с данными, просто выполните form.submit().

+0

Если вы делаете form.submit(), это будет сделано вместо запроса на отправку ajax, я думаю? Для этого просто потребуется функция javascript, и внутри я ставлю nameoftheform.submit(), это правильно? Проблема в том, что я должен изменить действие формы на URL. Первоначально он отправляется на ту же страницу. – Galivan

+0

Да, это было бы сделано вместо вызова AJAX, и вы должны изменить действие формы на URL-адрес, который хотите отправить («https: // hello/theurl»). Если это то, что изменяется в зависимости от того, что пользователь выбирает, вы можете изменить действие формы в javascript перед отправкой. Для этого просто выполните следующее: $ ("#form_id") .attr ("action", "https: // hello/theurl"). –

+0

Я протестировал этот метод, и он работает! Я пойду с этим вместо своей первоначальной идеи, поскольку это более прямолинейно. Благодаря! – Galivan