【问题标题】:Send JSON and HTTPRequest to server AJAX向服务器 AJAX 发送 JSON 和 HTTPRequest
【发布时间】:2013-10-07 11:45:28
【问题描述】:

我正在尝试将json 数据和Http headers 发送到服务器

App.LoginController = Ember.ObjectController.extend(
{
    username: '',
    password: '',
    actions: {
        login: function(){
            username = this.get('username');
            password = this.get('password');
            // alert("User: "+ username + " Pass: " + password);
    
            var loginData = {"code":username, "passkey":password};
            loginData = JSON.stringify(loginData);
            // alert(loginData);
            var timeStamp = getTimeStamp();
            // alert(timeStamp);
    
            $.ajax({
                url: 'http://192.168.254.222:8080/project/auth/login',
                type: 'POST',
                beforeSend: function (request)
                {
                   request.setRequestHeader("token", authToken);
                },
                data: loginData,
                dataType: 'json',
                contentType: 'application/json',
                success: function(data) {
                    var returned_data = data;
                    console.log(returned_data);
                    console.log(returned_data.error); 
                    alert('yey!');
                },
                error: function(xhr, status, error){
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message);
            }
        });
    }
}
});
  1. 但变量err返回undefined
  2. 另外我不知道如何将多个HttpRequest headers发送到服务器,同时获取HttpReponse headers
  3. chrome 给了我这个:

拒绝加载 chrome-extension://nhjloagockgobfpopemejpgjjechcpfd/js/jquery.min.map。 资源必须列在 web_accessible_resources 清单键中 为了被扩展之外的页面加载。 本地主机/webui/:

GET chrome-extension://invalid/

除此之外,我在 Firefox 中没有收到任何错误消息

【问题讨论】:

  • 为避免 chrome 控制台错误,只需 remove the first comment line from jQuery.min.js 文件用于 min.map 文件。
  • 如果这是<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 你在说什么,我包含了来自云端的依赖

标签: javascript jquery ajax json google-chrome


【解决方案1】:

From AJAX documentation

dataType - 您期望从服务器返回的数据类型。希望您返回 json 响应

检查authToken 是字符串吗?

 beforeSend: function (request)
 {
   request.setRequestHeader("token", authToken); 
 }

另外添加.ajaxComplete(function( event, xhr, settings ) 看看你在这里得到了什么

同样对于设置 HttpHeader 你可以写一个服务器代码取决于你使用的技术

我为 ASP.Net 编写以下内容

 response.Content.Headers.Add("some_header", "Value");

在 jQuery ajax 成功回调中读取这个

     $.ajax({
            url: 'http://192.168.254.222:8080/project/auth/login',
            type: 'POST',
            beforeSend: function (request)
            {
               request.setRequestHeader("token", authToken);
            },
            data: loginData,
            dataType: 'json',
            contentType: 'application/json',
            success: function(data, textStatus, request) {
                var returned_data = data;
                alert(request.getResponseHeader('some_header'));
            },
            error: function(xhr, status, errMsg){

            alert(errMsg);
        }
    });        

【讨论】:

  • 是的,token: 7ffed684cbe1fc085b7b47dc4e508e99a5effee9 这是值,它只是一个普通字符串。服务器将返回我需要得到的json 字符串和HttpResponse headers
  • @shin-shan,你要发送HttpHeader到服务器or从服务器取回它吗?
  • 在我发送jsonHttpRequest headers之后,服务器会返回一个json字符串,我需要得到HttpResponse headers
  • .ajaxComplete 不会与 this 形成对比吗?我只需要调试error: function () 看看我错过了什么
  • @shin-shan,不。当 ajax 失败或成功时,您可以在需要执行某些操作时使用此回调。但是在您的情况下,如果您成功返回数据和标头,则只能使用success
猜你喜欢
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多