jquery中的POST请求出错

时间:2012-05-10 15:35:33

标签: jquery asp.net ajax post http-post

我的大学成绩卡(成绩)理解起来非常复杂,很难计算出学生的实际百分比。 所以,我想为学生提供一项服务,学生只需要输入注册号码即可。我将自己计算结果。

首先,我尝试向http://hurl.it中的评分卡页面发送帖子请求 这是perm链接http://hurl.it/hurls/c61f1d38b6543965151a1c8a8d6f641b8921da49/986ecba51b61022fa9fa162be612d7c928051989

但是当我从我的网站使用jquery发送相同的请求时,我收到错误: 我正在使用以下代码发送请求。

            $.ajax({
                type: "POST",
                url: "http://stusupport12.ignou.ac.in/Result.asp",
                data: "submit=Submit&eno=092853268&hidden%5Fsubmit=OK&Program=BCA",
                success: function (d) {
                    $("#resultDiv").html(d);
                },
                error: function (a, b, c) { alert(a + b + c); }
            });

请帮帮我朋友。

更新2 - 我通过在服务器上处理请求找到了我的解决方案。我创建了一个通用处理程序(.ashx)来处理服务器上的请求,并将处理后的请求发送回客户端。我可以通过Jquery来调用它。

这是代码

<%@ WebHandler Language="C#" Class="IGNOU" %>

using System;
using System.Web;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Net;
using System.IO;

public class IGNOU : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/html";
        context.Response.Write(Func(context.Request.QueryString["eno"]));
    }

    public bool IsReusable {
        get {
            return false;
        }
    }
    public string Func(string eno)
    {
        string str = string.Empty;
        WebRequest request = WebRequest.Create("http://stusupport12.ignou.ac.in/Result.asp");
        // Set the Method property of the request to POST.
        request.Method = "POST";
        // Create POST data and convert it to a byte array.
        string postData = "submit=Submit&Program=BCA&hidden_submit=OK&eno=" + eno;
        byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(postData);
        // Set the ContentType property of the WebRequest.
        request.ContentType = "application/x-www-form-urlencoded";
        // Set the ContentLength property of the WebRequest.
        request.ContentLength = byteArray.Length;
        // Get the request stream.
        Stream dataStream = request.GetRequestStream();
        // Write the data to the request stream.
        dataStream.Write(byteArray, 0, byteArray.Length);
        // Close the Stream object.
        dataStream.Close();
        // Get the response.
        WebResponse response = request.GetResponse();
        // Display the status.
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        // Get the stream containing content returned by the server.
        dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);
        // Read the content.
        string responseFromServer = reader.ReadToEnd();
        // Display the content.
        Console.WriteLine(responseFromServer);
        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();

        return responseFromServer;
    }
}

更新1 添加了网页链接 https://www.bobdn.com/IGNOU_BCA_Result.aspx

3 个答案:

答案 0 :(得分:1)

此错误是由于跨域策略引起的,响应将返回正确的数据,但浏览器本身阻止响应,因为它不是同一个来源。

正如您在twitter https://twitter.com/crossdomain.xml上看到的那样,这是跨域政策,您需要在crossdomain.xml的根目录中放置一个stusupport12.ignou.ac.in文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
  <allow-access-from domain="www.bobdn.com" />
</cross-domain-policy>

我的asp.net模型:

byte[] buffer = Encoding.UTF8.GetBytes("submit=Submit&eno=092853268&hidden%5Fsubmit=OK&Program=BCA");

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://stusupport12.ignou.ac.in/Result.asp");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = buffer.Length;
req.CookieContainer = new CookieContainer(); // enable cookies 

Stream reqst = req.GetRequestStream(); // add form data to request stream
reqst.Write(buffer, 0, buffer.Length);
reqst.Flush();
reqst.Close(); 

答案 1 :(得分:0)

我的猜测是错误不在函数声明function (a, b, c)中,而是在警报中。我同意a, b, c是可怕的变量名称 - 特别是b / c a是XMLHttpRequest对象并不明显,而bc是字符串。 /> 如果您意识到这一点,您将很容易看到错误 - 无法使用字符串连接XMLHttpRequest对象。

请在此处查看有关错误功能的文档: http://api.jquery.com/jQuery.ajax/

答案 2 :(得分:0)

以下是重点:

您引用的站点(hurl.it)实际上使用服务器端脚本,使其服务器充当代理并为您重新获取结果。我绝对肯定你因为同源政策而不能执行这样的请求客户端。

想象一下,您可以自由地执行此类请求,您可以使用未经过滤的呼叫加载其他人的服务器,从而分配来自数千个不同IP的呼叫而不是您的服务。这就是SOP要求您在两者之间放置自己的服务器以便监视和指导这些请求的原因。

另一个解决方案是远程服务器设置API服务以接收客户端调用,从而返回可以正常工作的JSON响应。 Preatty所有API服务都需要一个额外的参数,这个参数可能是您的域名的个人开发人员密钥,因此他们可以在任何情况下知道这些请求来自哪里