Javascript可以';不能与API通信

Javascript可以';不能与API通信,javascript,jquery,html,api,Javascript,Jquery,Html,Api,我正在尝试编写一个webform,它将从用户那里获取一个城市和州,将它们传递到API的url中,然后将高值和低值输出到表单中 目前,如果我在IE中调试它,我会在ajax中点击错误,它会显示一个提示,提示失败404,但是如果我在firefox中调试,如果我查看firebug,我会看到304响应 我已经通过jsfiddle运行了我的ajax调用,它会在警报中返回正确的数据。所以我认为问题不在于ajax本身。我已经将剩下的javascript和HTML添加到JSFIDLE中,然后运行它,当我点击提交按

我正在尝试编写一个webform,它将从用户那里获取一个城市和州,将它们传递到API的url中,然后将高值和低值输出到表单中

目前,如果我在IE中调试它,我会在ajax中点击错误,它会显示一个提示,提示失败404,但是如果我在firefox中调试,如果我查看firebug,我会看到304响应

我已经通过jsfiddle运行了我的ajax调用,它会在警报中返回正确的数据。所以我认为问题不在于ajax本身。我已经将剩下的javascript和HTML添加到JSFIDLE中,然后运行它,当我点击提交按钮时,我会得到一个失败警报,JSFIDLE会说“错误:请使用POST请求”。如果我这样做,它仍然做同样的事情,所以我迷路了

如果能帮上忙,那就太好了。这是我现在的代码

HTML:


因为这是一个跨域请求。由于同源策略,浏览器将阻止它

如果您想使用跨域ajax,应该在ajax中启用
cors
。服务器也应该启用它

而且
url
看起来不像是支持
jsonp


还有另一种方法可以实现跨域ajax。将服务器设为代理。也就是说,在您的服务器中会有一个方法,它使用http post从其他域获取数据。。您将仅创建对服务器方法的调用。它将调用跨域并返回数据

这里有两件事引起了我的注意

1) 跨域AJAX请求可能会遇到与CORS相关的问题


2)
dataType
属性可能应该是
json
,而不是
jsonp

,您正试图执行跨域AJAX请求,该请求被大多数浏览器的安全策略阻止。这是因为这样的请求可以用于在其他站点上执行操作,而用户不会注意到


解决方法是在远程服务器上使用,这样就可以将资源共享到发生AJAX请求的源域。

谢谢,我正在研究cors,因为我以前从未使用过它,但我在代码中似乎找不到任何例子。我不确定在哪里添加访问控制允许来源:@TheDoctor查看编辑的答案。检查你是否能利用它
<body>
    <form id="weatherForm">
        City:<input type="text" id="City" /><br />
        State:<input type="text" id="State" /><br />
        High:<p id="High"></p><br />
        Low:<p id="Low"></p><br />
        <button id="btnSubmit">Submit</button>
    </form>
 </body>
$(document).ready(function () {
     $('#btnSubmit').on('click', findTemps)
});

function findTemps() {
    var city = $('#City').val();
    var state = $('#State').val();
    var fullUrl = 'http://api.wunderground.com/api/(Key here)/history_20140303/q/' + state + '/' + city + '.json';

    $.ajax({
        url: fullUrl,
        dataType: 'jsonp',
        type: 'POST',
        success: function (parsed_json) {
            var High = parsed_json.history.dailysummary[0].maxtempi;
            $('#High').val() = High;
            var Low = parsed_json.history.dailysummary[0].mintempi;
            $('#Low').val() = Low;
            alert("High in " + city + ", " + state + " is " + High);
            alert("Low in " + city + ", " + state + " is " + Low);
        },
        error: function (e) {
            alert('Failure ' + e.status);
        },
        done: function () {
            alert('done');
        }
     });
}