проблема с постом jQuery ajax, не отправляющим данные на страницу asp - PullRequest
0 голосов
/ 11 декабря 2011

У меня есть скрипт Greasemonkey, который отправляет форму через запрос ajax (post) со всеми необходимыми парами имя / значение. Я получаю ответ на запрос, но он не содержит никакого ответа на данные, размещенные на странице. Например, сервер должен ответить некоторыми данными, такими как цена, вес и т. Д., Но все равно, что он не видит пары «имя-значение» в запросе ajax.

Я просматриваю параметры записи ajax в Firebug для вызова Ajax, и они в точности совпадают с параметрами записи обычной отправки страницы. Этот сайт требует, чтобы вы вошли в систему с именем пользователя / pw, но, войдя в систему, я думаю, что он сохраняет состояние с помощью куки. Может ли причина, по которой Ajax-вызов работает, в том, что он не отправляет определенный куки-файл на сервер в Ajax-запросе? Просмотр файлов cookie, отправленных с помощью запроса ajax, аналогичен отправке файлов с обычной страницей. Только один указан как HttpOnly. Не уверен, что это имеет значение.

У меня никогда не было этой проблемы в прошлом, и я не могу понять, почему я не могу заставить это работать.

// ==UserScript==
// @name          test
// @description   test
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// @include       *http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx*
// ==/UserScript==

    jQuery.ajax({
    url: 'http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx',
    data: '__EVENTTARGET=&__EVENTARGUMENT=&__SCROLLPOSITIONX=0&__SCROLLPOSITIONY=0&__VIEWSTATE='+encodeURIComponent(jQuery('#__VIEWSTATE').val())+'&ctl00$ContentPlaceHolder1$txtQuantity=1&ctl00_ContentPlaceHolder1_txtPartNumber=70367301P&ctl00_ContentPlaceHolder1_btnSubmit=Submit',
    type: 'POST',
    async: false,
    cache: false,
    success: function(data){
        }
    });

Я понимаю, что в обратном вызове успеха ничего нет, я просто смотрю на ответ в firebug.

Изменить: Я пытался это, и он по-прежнему не возвращает "нормальный" ответ

// ==UserScript==
// @name          test
// @description   test
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// @include       *http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx*
// ==/UserScript==


jQuery('#ctl00_ContentPlaceHolder1_txtPartNumber').val('70367301P');
var form_data = $('#aspnetForm').serialize();

    jQuery.ajax({
    url: 'http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx',
    data: form_data,
    type: 'POST',
    async: false,
    cache: false,
    processData: false,
    success: function(data){
        }
    });

Ответы [ 2 ]

0 голосов
/ 11 декабря 2011

Я много работал с ASP MVC в последнее время, и иногда, когда я хочу получить данные в виде FormCollection, я оборачиваю поля ввода в тег Ajax.BeginForm, который выглядит примерно так:

@using (Ajax.BeginForm("ActionName", "Controller", null, new AjaxOptions
            { }, new { id ="AjaxForm" }))

Iповерьте, когда он выводится, он выглядит так:

<form action="ActionName"  data-ajax="true" data-ajax-url="/Controller/ActionName" id='AjaxForm'> </form>

Это позволит форме фактически отправлять FormCollection как «обычный» POST ... Возможно, вам придется немного пересмотреть синтаксис.не на моем ноутбуке для разработки, чтобы дать вам точный код, но он более или менее похож на выше.

0 голосов
/ 11 декабря 2011

ваши данные должны быть в ключе, такие пары значений:

data: { 'keyname' : 'value' } 

в вашем коде:

  jQuery.ajax({
    url: 'http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx',
    data: { 'data' : '__EVENTTARGET=&__EVENTARGUMENT=&__SCROLLPOSITIONX=0&__SCROLLPOSITIONY=0&__VIEWSTATE='+encodeURIComponent(jQuery('#__VIEWSTATE').val())+'&ctl00$ContentPlaceHolder1$txtQuantity=1&ctl00_ContentPlaceHolder1_txtPartNumber=70367301P&ctl00_ContentPlaceHolder1_btnSubmit=Submit'}
    type: 'POST',
    async: false,
    cache: false,
    success: function(data){
        }
    });

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

string posteddata= Request.Form["keyname"]; 
...