2016-10-05 7 views
1

Я обновляю старый сайт и бегаю в икоту. Я переписываю контактную форму для использования ajax, а не для обычной страницы подачи/благодарности. Действие формы отправляется на сторонний сайт (у меня нет доступа к PHP, который анализирует данные), и он работает с базовой формой. Когда я отправляю с использованием ajax, форма отправляется, ошибки не генерируются, но данные, помещенные в БД третьим кодом, пустые. Те же имена форм, одинаковые значения. Вот мои ЯШ:Используйте данные формы вместо строки запроса с ajax

$("#contactForm input,#contactForm textarea").jqBootstrapValidation({ 
    preventSubmit: true, 
    submitError: function($form, event, errors) { 
     // additional error messages or events 
    }, 
    submitSuccess: function($form, event) { 
     event.preventDefault(); // prevent default submit behaviour 
     // get values from FORM 
     var fname = $("#fname").val(); 
     var lname = $("#lname").val(); 
     var email = $("#email").val(); 
     var cphone = $("#cphone").val(); 
     var comments = $("#comments").val(); 
     var address = $("#address").val(); 
     var city = $("#city").val(); 
     var zip = $("#zip").val(); 
     $.ajax({ 
      url: "https://my.serviceautopilot.com/AddEstimate.aspx?id=*************&wid=****************", 
      type: "POST", 
      dataType: 'jsonp', 
      processData: false, 
      data: { 
       fname: fname, 
       lname: lname, 
       cphone: cphone, 
       email: email, 
       comments: comments, 
       address: address, 
       city: city, 
       zip: zip 
      }, 
... 

На оригинальной submition данные выглядели так: form data vs query string Я считаю его потому, что данные передаются в виде данных на оригинал, но как часть строки запроса в второй пример. Правильно ли я предполагаю это? Есть ли другая проблема с кодом?

Я пробовал использовать объект данных формы, который не работал, он все еще появился в строке запроса и все еще прошел через пробел. Я попытался настроить тип данных, тип контента, processdata = false, но не повезло. Раньше у меня был доступ к серверному коду, и у меня не было отладки проблем, и я делал легкие исправления для такого рода вещей, но я немного потерял на этом этапе. Спасибо вам всем.

ответ

2
dataType: 'jsonp', 

JSONP просит должен быть GET запросов (они работают путем создания <script> элемента с атрибутом src). Они не могут включать тело запроса.

Не используйте JSONP, если вы хотите сделать запрос POST.

(В этом случае не используйте JSONP в любом случае, это грязный хак, который будет работать вокруг одной и той же политики происхождения, и у нас был CORS уже много лет).

+0

Спасибо за комментарий. Я действительно использовал его, чтобы обойти политику одного и того же происхождения. Так что есть другой способ. Это хорошо знать – Speed

0

Вам необходимо будет использовать запрос CURL с методом Post, если вы используете третью сторону для сбора данных формы.