【问题标题】:Callback HTTP 400 Error回调 HTTP 400 错误
【发布时间】:2016-08-03 13:35:30
【问题描述】:

我尝试使用 jQuery AJAX 通过 REST API 发布数据。我的代码如下,

$.ajax({
    url: 'myurl',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(jsonData),
    dataType: 'jsonp',
    success: function(responseData, textStatus, jqXHR) {   
        if (responseData.result == "true") {            
            $.mobile.changePage("#registersuccess",{transition:"slide"});
        } else {
            alert("kayıt başarısız");
        }
    }
});

我正在使用 Explorer 开发者工具进行监控。我收到此错误消息:

HTTP400:错误请求 - 由于语法无效,服务器无法处理请求。
GET - http:MyService?callback=jQuery111306711937631005869_1470230696599&[{"name":"","phoneNumber":"","password":""}]&_=1470230696600

这是什么意思:&_=1470230696600

【问题讨论】:

    标签: javascript jquery ajax restful-url


    【解决方案1】:

    对于 JSONP 请求,缓存默认为 false(请参阅代码中的 dataType);参数_ 用于突发缓存。该值是请求时的时间戳。

    请参阅http://api.jquery.com/jQuery.ajax/ 的 jQuery 文档

    【讨论】:

      【解决方案2】:

      datatypejsonp 替换为json。 你可以在这里阅读更多关于jsonjsonp之间的区别What are the differences between JSON and JSONP?

      【讨论】:

      • 当我从 json 更改为 jsonp 时,出现跨域错误。
      • 能否指定客户端和服务器是否在同一个域中?如果不是,您应该考虑在您的服务器上启用 CORS。
      • 不,我的服务器和客户端不在同一个域。我正在使用 Amazon Linux 服务器,我如何启用,除了我添加了我的 jquery ajax 代码缓存:true;我收到此错误消息:GET - http:MyService?callback=jQuery111306711937631005869_1470230696599&[{"name":"","phoneNumber":"","password":""}]
      • 我不确定您在这里使用的是哪台服务器,但在 Amazon Linux Server 上进行的 Google 搜索返回了以下内容:docs.aws.amazon.com/AWSEC2/latest/APIReference/… 它表明默认情况下在 AWS 上启用了 CORS。如果这不是您正在使用的服务器,请提供有关您正在使用的服务器应用程序的更多信息:它是 Apache Tomcat 吗? IIS?玻璃鱼?每个都有自己的 CORS 设置
      • 我解决了我的问题,感谢您的帮助。解决方案如下
      【解决方案3】:

      我解决了添加服务器站点代码的问题,

      public class CORSFilter
      

      实现 ContainerResponseFilter {

      public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
              throws IOException {
      
          MultivaluedMap<String, Object> headers = responseContext.getHeaders();
      
          headers.add("Access-Control-Allow-Origin", "*");
          //headers.add("Access-Control-Allow-Origin", "http://podcastpedia.org"); //allows CORS requests only coming from podcastpedia.org       
          headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");          
          headers.add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia");
      }
      

      }

      【讨论】: