2014-01-20 3 views
1

Мне нужно получить данные с сервера с помощью jQuery AJAX в форме HTML, а затем сохранить данные ответа в строковой переменной php. До сих пор мой код:Форма HTML с использованием jQuery AJAX

<form method="post" name="myform" id="myform" action="https://domain.com/cgi-bin/cgi.exe"> 
<input name="exec" value="viewproduct" type="hidden"> 
<input name="customer" value="customer_name" type="hidden"> 
<input name="sku" value="sku_number" type="hidden"> 
<input name="submit" type="button"> 
</form> 
<div id="results"></div> 
<script type="text/javascript"> 
jQuery("#myform").submit(function(e){ 
    var postData = jQuery(this).serializeArray(); 
    var formURL = jQuery(this).attr("action"); 
    jQuery.ajax(
    { 
     url : formURL, 
     type: "POST", 
     data : postData, 
     success:function(data, textStatus, jqXHR) 
     { 
     jQuery('#results').html(data.toString()); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) 
     { 
     alert('fail');  
     } 
    }); 
    e.preventDefault(); 
}); 

jQuery(document).ready(function() { 
    jQuery("#myform").submit(); 
}); 
</script> 

Но я до сих пор не вижу никакого результата. Если я просто использую форму, как правило, без какого-либо js-кода, тогда я получу исходные данные от сервера/базы данных непосредственно в браузере. Как сохранить данные необработанного ответа в браузере в строковой переменной в php?

+0

Вы не получаете предупреждение о сбое, верно? Если #results остается пустым, либо он не отображается, либо ваш php ничего не возвращает. –

+0

* «Как сохранить данные необработанного ответа в браузере в строковые переменные в php?» * Не имеет смысла. пожалуйста, уточните? –

+0

жаль, что я имел в виду, чтобы привести к тому, что в форме не было данных. – Deryck

ответ

1

Измените submit() обработчик, чтобы включить это в первой строке:

jQuery("#myform").submit(function(e){ 
    e.preventDefault(); // <--- 
    .... 

и/или добавить return false; в конец.

Если это останавливает его от перегрузки, но ничего в ваших #results DIV не показывать, устранить, изменив success() в AJAX, чтобы использовать это:

jQuery('#results').html(data.toString()); 

Если что-то показывает, перейти к коду сервера и разделить ваши данные на отдельные свойства, которые ваш Javascript может разделить и использовать отдельно (или объединить все это в одну большую строку, если хотите).

.html() принимает вход String, а не объект (который в данном случае data).

+0

Спасибо, но он все равно возвращает «сбой». – user1576748

+0

Это хорошо. Это означает, что ваш серверный код - это то, о чем вам нужно сейчас беспокоиться. Вы также можете опубликовать это, если хотите помочь с ним. – Deryck

+0

Желаю, чтобы я мог, но удаленный сервер/база данных даже не использует PHP. Сервер отправляет ответ в формате ответа HTTP (если я использую обычную форму). Мне нужно записать этот ответ в файл или переменную, подлежащую анализу. – user1576748

0

Вы не сможете сохранить значение Javascript в переменной PHP, потому что PHP работает на сервере и возвращает ответ браузеру, где Javascript работает в браузере. Что вы можете сделать, это вызвать скрипт с AJAX, а затем установить свои значения формы с JQuery, используя

$("input[name=customer]").val(data); 

Вы можете либо иметь вызов AJAX для каждого входа или вы можете разобрать строку возврата, чтобы получить каждое значение. Первый может быть более прямым.

Если действие становится проблемой, удалите полностью и просто добавьте onClick в кнопку отправки, которая вызывает функцию, которая вызывает вызовы AJAX.

Надеюсь, это поможет!

+0

Спасибо. Фактически, я запускаю вышеуказанные коды в файле PHP. Я пытаюсь захватить данные HTTP-ответа, которые отправляются сервером после отправки трех значений в форме. – user1576748

Смежные вопросы