【问题标题】:jQuery ajax return always error on simple postjQuery ajax 在简单的帖子上总是返回错误
【发布时间】:2012-02-08 00:51:09
【问题描述】:

我正在为这个问题撞墙。我正在使用 JQuery 1.6.2 将 AJAX 方法用于在单独的子域上运行的非常简化的 HTTP 服务器。如果我只是发布一个纯 HTML 表单,我会得到正确的输出,但我当然想用 Javascript 让它变得更好。

所以我使用了 AJAX 方法,如下所示:

$('.send_sample').click(function () {

        var request = $.ajax({
            url : "http://removedurl:8080/SAMPLES",
            type : 'POST',
            dataType : 'text',
            crossDomain : true,
            cache : false,
            accepts : 'text/plain',
            data : {username : '<?php echo $_SESSION['username'] ?>', first_name : '<?php echo $_SESSION['first_name']; ?>', last_name : '<?php echo $_SESSION['last_name']; ?>', company : '<?php echo $_SESSION['company']; ?>', sequence_id : '', filename : '', sample_id : '', quantity : '', output_file : '', delivery : '', email_copy : ''},
            success : function (return_value) {
                console.log(return_value);
            },
            error : function (error_info) {
                console.log(error_info);
            },
            complete : function (complete_jqXHR, textStatus) {
                console.log(textStatus);
            }
        });

        console.log(request);

    });

注意 url 已被删除,但其他一切都相同,包括端口 8080(相信我,服务器接受 8080 上的 HTTP 请求。

因此,当我打开 fiddler 并运行此页面时,请求发出并在 Fiddler 中完全正常返回。我什至看到了正确的输出,它只是单词 TRUE。你甚至可以在这里看到整个响应:

HTTP/1.1 200 200 OK
Connection: close
Content-Length: 8
Server: Indy/9.0.18

TRUE

正如我之前所说,这个软件使用的这个 HTTP 服务器非常简单。但是返回的 JQuery 直接进入错误,没有其他描述。如果我在 Chrome 中进行调试,我还会收到一条小消息:

XMLHttpRequest 无法加载 http://removedUrl:8080/SAMPLES。 Access-Control-Allow-Origin 不允许来源http://192.168.2.140

有谁知道是什么原因造成的。

另外,我在 JQuery 的 ajax 方法中逐步添加了字段:dataType、crossDomain、cache、accepts...只是为了看看它是否有所作为.

谢谢!

【问题讨论】:

  • dataType : 'text',?它“看起来”就像您正在尝试发布 json(但这不是数据中的有效 json:当然),或者真正的有效文本。

标签: jquery xmlhttprequest cross-domain


【解决方案1】:

您必须使用 jsonp 来进行跨站点请求....
设置 crossDomain:true 无济于事,因为浏览器会阻止来自外部域的回复。
这是一个众所周知的 javascript 限制,但是,正如我所说,您可以使用 jsonp 摆脱它。 你可以google一下,你会发现很多资源!
请注意,您需要修改服务器“http://removedurl:8080/SAMPLES”才能获得 jsonp 响应。
如果您无法访问服务器,则必须依赖服务器端代理(PHP/ASP.Net 等)

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 2012-05-15
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    相关资源
    最近更新 更多