jQuery AJAX请求简单POST时总是返回错误

3
我正在为这个问题苦苦挣扎。我使用JQuery 1.6.2来使用AJAX方法与运行在单独子域上的简化HTTP服务器进行通信。如果我只是POST一个普通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并运行此页面时,请求顺利发送和返回。我甚至可以看到正确的输出,只是单词“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。源http://192.168.2.140未被Access-Control-Allow-Origin允许。
有人知道这可能是什么原因吗?
此外,我已经逐步添加了JQuery的ajax方法中的字段:dataType,crossDomain,cache,accepts...只是为了看看是否有任何区别。
谢谢!

数据类型:'text',它“看起来”像您正在尝试发布JSON(但这不是有效的JSON数据,当然),或者真的是有效的文本。 - Mark Schultheiss
1个回答

0

你需要使用jsonp来进行跨站请求...
设置crossDomain:true是无效的,因为浏览器会阻止来自外部域的响应。
这是一个众所周知的javascript限制,但是,正如我所说,你可以使用jsonp来解决它。 你可以在谷歌上搜索,会有很多资源!
请注意,你需要修改你的服务器"http://removedurl:8080/SAMPLES"以便获得jsonp响应。
如果你没有访问服务器的权限,你将不得不依赖于服务器端代理(PHP/ASP.Net等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接