使用REST发送ajax请求但不能使用jQuery

时间:2014-09-12 14:25:09

标签: javascript jquery ajax

我正在尝试发送ajax调用。我使用了名为Postman [Link to it]的Chrome的REST测试扩展程序。当我使用扩展程序发送调用时,它可以工作,但是当我通过jQuery发送它时,它不起作用,我得到一条错误消息:“错误0”。

这是Postman工具发送给服务器的请求:

POST /form/front HTTP/1.1
Host: go.com
Cache-Control: no-cache

{ "sitename": "AAGx", "zone": 12, "sector": 34, "square": 7} 

这是我向服务器发送请求的代码:

function insert_newform() {
    form_data = {sitename: 'AAGx', zone: 12, sector: 34, square: 7}
    $.ajax({
            type: "POST",
            url: 'http://go.com/form/front', 
            data: JSON.stringify(form_data),
            success: function(result) { alert("good!") },
            error: function(jqXHR, textStatus, errorThrown) { alert(textStatus) }
    });
}

$("#show").click(function() {
        insert_newform()
    }
    );

我无法找出我的电话有什么问题!

编辑:go.com就是一个例子!

EDIT2:我疯了。

Edit3:我更新了我的代码以添加JSON.stringify()

编辑4:当我将文件放在服务器上并运行脚本时,它运行良好,一切都很好!但是当我在我的机器上本地运行文件时,调用不起作用,我得到了这个错误。我真的疯了!我无法弄清楚出了什么问题:(

编辑5:也许这与这个名为CORS的东西有关?但它是如何通过Chrome插件运行的,但它不适用于我的本地脚本?!!

2 个答案:

答案 0 :(得分:2)

如果您的data属性是JavaScript对象,jQuery会将其转换为表单数据以进行传输。 Postman可能会将其作为实际字符串发送。尝试将data用单引号括起来:

data: '{"sitename": "AAGx", "zone": 12, "sector": 34, "square": 7}', ...

编辑:为了回应您的修改,我几乎可以保证您是CORS或跨源资源共享问题。 AJAX和JavaScript通常受到各种安全限制。限制JavaScript能力的最核心的安全概念之一是Same Origin Policy。这个想法是为了防止XSS(cross-site scripting)攻击。

jQuery的AJAX函数will give an error code of 0 if it experiences CORS issues

有关于how local files are under more strict security constraints here的详细解答,可以完美地解释您的情况。

如果您拥有对服务器的控制权,那么您的解决方案是从服务器发送Access-Control-Allow-Origin标头。否则,您可以尝试使用不使用XMLHTTPRequest对象且不受相同安全约束的JSONP。

答案 1 :(得分:-1)

主机go.com不允许您域中的XSS / CORS

XMLHttpRequest cannot load http://go.com/form/front. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://stackoverflow.com' is therefore not allowed access.