JSON.parse有效,但jQuery.getJSON返回http错误403

gbe*_*927 1 javascript jquery parsing json

当我使用JSON.parse(jsonString)时,JSON的解析完全没问题.

var result = JSON.parse(jsonString);
Run Code Online (Sandbox Code Playgroud)

但是当我使用jQuery.getJSON(jsonString)时,我收到了一个http错误403.

var result = jQuery.getJSON(jsonString);
Run Code Online (Sandbox Code Playgroud)

知道为什么一个会工作而另一个不会?他们都在读一个字符串.

谢谢!

Dar*_*rov 5

他们都在读一个字符串.

不好了!这两种方法非常不同.他们绝对没有任何共同之处.他们正在完成两项完全不同的任务.

第一个简单地将JSON字符串解析为javascript对象:

var result = JSON.parse('{"foo": "bar"}');
alert(result.foo);
Run Code Online (Sandbox Code Playgroud)

会表明bar.另请注意,JSON.parse方法是现代浏览器中的内置方法.它是纯粹的javascript,与jQuery完全无关.旧版浏览器不支持它.对于他们,您需要将json2.js脚本包含在您的页面中.

第二个执行AJAX调用并期望作为参数的url:

jQuery.getJSON('/someserversidescript', function(result) {
    // callback to be executed when the AJAX request succeeds
});
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的那样,论证是一个网址.通话jQuery.getJSON('{"foo": "bar"}')完全没有意义.我猜这就是你的服务器响应403错误的原因,因为这不是你服务器上的有效网址.它期望服务器将返回JSON字符串作为响应.它只是一个简写:

$.ajax({
    url: '/someserversidescript',
    type: 'GET',
    dataType: 'json',
    success: function(result) {
        // callback to be executed when the AJAX request succeeds
    }
});
Run Code Online (Sandbox Code Playgroud)