【问题标题】:JQuery AJAX doesn't get to success call back functionJQuery AJAX 无法成功回调函数
【发布时间】:2013-12-11 12:47:28
【问题描述】:

这是我的 jQuery Ajax 代码

$(document).ready(function() {

          $("#submitService").click(function(){  
              alert("Before ajax");
            $.ajax({
               type: "GET",
               url: "http://api.openweathermap.org/data/2.5/weather?q=London,uk",
               headers: {"accept": "application/json"},
             success: function (dataItem) {
                alert("Success..");
            },
             complete: function (dataItem) {
                alert("Completed");
            },
              error: function (dataItem) {
                 alert("Error in making engine call."+dataItem);
              }
             });
             alert("After ajax");

            });                 //click()
      });

当我的按钮被点击时,它会进入 [完成] 和 [错误] 回调方法,但不会进入“成功”回调方法。我怎样才能看到错误是什么?

我尝试 curl 相同的语句并且得到了有效的响应:

curl "http://api.openweathermap.org/data/2.5/weather?q=London,uk" -H "accept: application/json"

我使用的是 jQuery 1.7.2

<script type="text/javascript" src='<spring:url value="/resources/jquery/js/jquery-1.7.2.min.js"/>'></script>

在 FireBug 中,它显示该请求为 200 OK,但没有响应正文。但是当我通过 curl 执行此操作时,我会看到响应正文。

可能是什么问题? 谢谢

【问题讨论】:

    标签: java javascript jquery ajax jsp


    【解决方案1】:

    我猜,这是 URL 编码问题。将逗号, 替换为编码%2C

    url: "http://api.openweathermap.org/data/2.5/weather?q=London%2Cuk"
    

    【讨论】:

    • 谢谢!但即使我用 %2C 替换,仍然没有调用成功回调
    • 是的,您遇到了No Access-Control-Allow-Origin 问题。
    • 看起来我需要更改远程服务器配置以添加 Access-Control-Allow-Origin: * 作为响应的一部分。正确的?假设我对服务器有控制权。不然怎么解决?
    • 此链接可能对您有所帮助:stackoverflow.com/questions/12683530/…
    【解决方案2】:

    取消点击事件

    $("#submitService").click(function(e){  
        e.preventDeault();
        ...
    

    让 jQuery 对 URL 进行正确的编码

    type: "GET",
    url: "http://api.openweathermap.org/data/2.5/weather",
    data: {q : "London,uk" },
    

    希望服务和您的浏览器都支持 CORS,因为这是 Same Origin Policy 问题。

    【讨论】:

    • 这个也不行。我在函数中添加了一个参数然后 e.preventDefault();并将查询的数据部分与 url 分开。仍然没有成功。
    【解决方案3】:

    您是否注意到 Api 调用中没有 Allow-Access-Origin ?

    我在 chrome 上得到了这个

    XMLHttpRequest 无法加载 http://api.openweathermap.org/data/2.5/weather?q=London,uk。不 请求中存在“Access-Control-Allow-Origin”标头 资源。 Origin 'http://jquery.com' 因此不允许访问。

    我认为您遇到了跨站点脚本问题。

    【讨论】:

    • 谢谢 Nitin,我想没有办法解决这个问题。我打算向我的服务器发出请求并从我的服务器而不是从 javascript 进行调用。我的理解是约束仅适用于 js 进行调用,而不是 java 从服务器进行调用。我说的对吗?
    【解决方案4】:

    将 application/json 更改为 application/x-www-form-urlencoded

    【讨论】:

      猜你喜欢
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 2013-02-14
      • 2023-03-08
      相关资源
      最近更新 更多