【问题标题】:trouble with jQuery ajax post not submitting data to asp pagejQuery ajax post 问题未将数据提交到 asp 页面
【发布时间】:2011-12-11 14:47:59
【问题描述】:

我有一个 Greasemonkey 脚本,它通过 ajax 请求(post)提交表单,其中包含所有必需的名称/值对。我收到了对请求的响应,但它不包含对发布到页面的数据的任何响应。例如,服务器应该响应一些数据,如价格、重量等。但就好像它没有在 ajax 请求中看到名称值对一样。

我正在查看 Firebug 中用于 Ajax 调用的 ajax post 参数,它们与普通页面提交中的 post 参数完全相同。该站点要求您使用用户名/密码登录,但一旦登录,我想它会使用 cookie 保持状态。 Ajax 调用起作用的原因是因为它没有在 Ajax 请求中向服务器发送特定的 cookie 吗?查看通过 ajax 请求发送的 cookie 与通过普通页面提交发送的 cookie 相同。只有一个被列为 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){
        }
    });

我意识到成功回调中没有任何内容,我只是在看萤火虫中的响应。

编辑:我试过了,但仍然没有返回“正常”响应

// ==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){
        }
    });

【问题讨论】:

  • 这个请求是否来自它的同一个域?
  • 是的,正如您在 @include 中看到的那样,它与 ajax 调用的 URL 相同。
  • 页面是否有可能向服务器发送超过 1 个帖子?也就是说,它使用 state 检查? ...此外,我们真的无法从这个问题中说出更多信息。发布表单 HTML 和任何相关的 JS。

标签: jquery ajax cookies greasemonkey


【解决方案1】:

您的数据必须是这样的键值对:

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"]; 

【讨论】:

  • 这是不正确的,它只显示一个键名“数据”,而其他所有内容都显示为值。
  • 是的,问题是您发送数据的方式是正确的。我只是举个例子。如果你想发送更多数据,你应该制作更多的键:值对。比如: {'key1': 'value1' , 'key2' : 'value2' , 'key3' : 'value3' }
  • 好吧,恕我直言,我完全复制了您的代码,并准确地发布了我上面所说的内容,数据作为键名,其余作为值。那你能解释一下为什么我在 FB 看到这个结果吗?
【解决方案2】:

我最近一直在使用 ASP MVC,有时当我想要将数据作为 FormCollection 时,我会将输入字段包装在 Ajax.BeginForm 标记中,看起来与此类似

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

我相信当它被渲染出来时,它看起来像这样:

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

这将允许表单像“正常”POST 一样实际发布 FormCollection...您可能需要稍微检查一下语法我不在我的开发笔记本电脑上给您确切的代码,但它或多或少像以上。

【讨论】:

    猜你喜欢
    • 2011-05-13
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    相关资源
    最近更新 更多