jQuery ajax GET返回405 Method Not Allowed

我正在尝试访问需要身份验证的API.这是我正在使用的代码但我不断收到405 Method Not Allowed错误.有什么想法吗? (我的用户名和密码是正确的)
function basic_auth(user,pass){
    var tok = user + ':' + pass;
    var hash = $.base64.encode(tok);
    return "Basic " + hash;
}
var auth = basic_auth('username','password');
var releaseName1 = "11.6.3";
var releaseName2 = "11.6.3 Confirmed";
$.ajax({
    type: "GET",url: "https://www10.v1host.com/Company/rest-1.v1/Data/Story?sel=Description,Number,Name,Timebox.Name,Parent,AssetState&where=Custom_Release2.Name='"+releaseName1+"','"+releaseName2+"';AssetState='64'",beforeSend: function(xhr){
        xhr.setRequestHeader('Authorization',auth);
    },dataType: "xml",async: false,success: parseXml
});
function parseXml(xml){
    $(xml).find("item");
}

解决方法

你不能跨域进行javascript / Ajax调用(没有严重的kludging).我们过去为此做的是创建一个我们用javascript调用的本地jsp代理,但它只是远程URL的传递.

下面是一些示例JSP代码,它接近于我用来返回返回JSON的SOLR实例.

final String ENCODING = "UTF-8"; // this is the default unless specified otherwise (in server.xml for Tomcat)
    // see http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#Common_Attributes and
    // http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q2
    final String URI_ENCODING = "ISO-8859-1";

    HashMap<String,String> defaultSettings = new HashMap<String,String>() {
        {
            put("wt","json");
            put("rows","10");
            put("start","0");
        }
    };

    BufferedReader searchResponse = null;
    OutputStreamWriter forwardedSearchRequest = null;

    // TODO:  are there any headers that we need to pass on?
    // simply pass on the request to the search server and return any results
    try {
        URL searchURL = new URL("http://yourdestinationurlhere.com");
        HttpURLConnection conn = (HttpURLConnection) searchURL.openConnection();

        // read the request data and send it as POST data (unchanged)
        conn.setDoOutput(true);
        forwardedSearchRequest = new OutputStreamWriter(conn.getOutputStream());

        // at least for Tomcat 6.0,the default is really iso-8859-1,although it is reported as UTF-8
        // so,we will explicitly set it to URI_ENCODING in both places
        request.setCharacterEncoding(URI_ENCODING);

        String query = (String) request.getParameter("q");
        if ((query != null) && (! "".equals(query.trim()))) {
            query = URLEncoder.encode(query,request.getCharacterEncoding()); // we must use the same setting as the container for URI-encoding
            forwardedSearchRequest.write("&q=");
            forwardedSearchRequest.write(query);
        } else {
            // empty queries may return all results,so let's circumvent that
            forwardedSearchRequest.write("&q=help");
        }

        for(String key:defaultSettings.keySet()) {
            String resultType = (String) request.getParameter(key);
            if ((resultType == null) || "".equals(resultType.trim())) resultType = defaultSettings.get(key);
            forwardedSearchRequest.write("&"+key+"=");
            forwardedSearchRequest.write(resultType);
        }

        forwardedSearchRequest.flush();

        // read and forward the response
        // reset anything that may have been sent so far
        out.clearBuffer();

        // do this only if we have a 200 response code
        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            // the web server may be running as windows-1252,so let's ensure we have the right CS
            searchResponse = new BufferedReader(new InputStreamReader(conn.getInputStream(),ENCODING));

            String contentType = conn.getHeaderField("Content-Type");
            if ((contentType != null) && (! "".equals(contentType))) response.setHeader("Content-Type",contentType);

            String buffer;
            while ((buffer = searchResponse.readLine()) != null) out.println(buffer);
        } else {
            // dish out a mock-Solr-JSON response that includes a status and an error
            response.setHeader("Content-Type","application/json");
            out.println("{ responseHeader: {status: -1,responseCode: " + conn.getResponseCode()  +
                ",responseMessage: \"" + conn.getResponseMessage() + "\" } }");
        }
    } catch (Exception e) {
        throw new ServletException("Exception - " + e.getClass().getName(),e);
    } finally {
        if (forwardedSearchRequest != null) forwardedSearchRequest.close();
        if (searchResponse != null) searchResponse.close();
    }

相关文章

1.第一步 设置响应头 header(&#39;Access-Control-Allow...
$.inArray()方法介绍 $.inArray()函数用于在数组中搜索指定的...
jquery.serializejson.min.js的妙用 关于这个jquery.seriali...
JS 将form表单数据快速转化为object对象(json对象) jaymou...
jQuery插件之jquery.spinner数字智能增减插件 参考地址:http...