2014-07-09 48 views
0

我正在测试Azure表存储的REST API服务,我可以从表中获取没有问题的数据,但似乎无法从javascript更新记录。使用Fiddler进行相同的操作反而奏效。 URL是通过REST Web API更新Azure表存储记录

的https:// “我的账户” .table.core.windows.net/p73cca0789a574fd4a5b98012a8bb56bf(PartitionKey =%27Settings%27,RowKey =%27GeneralSettings_UICulture_1%27)SV = 2014年2月14日& TN = p73cca0789a574fd4a5b98012a8bb56bf & SPK =设置& EPK =设置& SIG = UE%2BdY4qa0Kk8MJ083jzuAqn7miGmIBV2C4DK6x7LL%双品%3D & SE = 2014-07-10T12%3A02%3A12Z & SP = raud

在我的Fiddler集中放置如列举HTTPMethod并将此作为请求身体:

{ 
    Value: 'en', 
    Version: 1, 
    SettingName: 'GeneralSettings' 
} 

和它的作品好,如果我检查在Azure上表中的值是否正确 更新从我的web应用程序,而不是,我用amplifyjs使AJAX调用,定义这样的方法:

amplify.request.define('manageSetting', 'ajax', { 
      url: url, 
      dataType: 'json', 
      beforeSend: function(xhr) { 
       xhr.setRequestHeader("Content-Type", "application/json"); 
      },     
      decoder: "defaultBehavior", 
      type: httpMethod 
     }); 

我得到一个400错误的请求错误,与消息:“其中一个请求输入无效” 在Firebug中,我可以看到这些都是我的请求头:

Accept application/json, text/javascript, */*; q=0.01 
Accept-Encoding gzip, deflate 
Accept-Language en-US,en;q=0.5 
Content-Length 46 
Content-Type application/json; charset=UTF-8 
DNT 1 
Host "myaccount".table.core.windows.net 
Origin https://localhost:444 
Referer https://localhost:444/MyWebApp/projects/dde1b522-0c7d-40f1-8e08-5c39a1ce91ef 
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0 
x-ms-date Wed, 09 Jul 2014 14:10:24 GMT 
x-ms-version 2014-02-14 

在Firebug要求的“把”标签状态:

Value=en&Version=1&SettingName=GeneralSettings 

我错过了什么吗? Thanx

回答

0

您是否为您的帐户的表服务配置了CORS? (请参阅http://msdn.microsoft.com/library/azure/dn535601.aspx
如果这不是问题,您可以查看ajax调用中的Fiddler跟踪,并查看它与Fiddler直接发送的内容之间的差异吗?

+0

是的,我所做的,其实工作的GET操作正确。从Fiddler的'Inspector'页面,我看到json对象发送正确。我看到的唯一区别是在Firebug中,在使用POST方法的另一个Web API调用中,我发现发送到服务器的值以查询字符串形式显示(例如Value = en&Version = 1&SettingName = GeneralSettings),并且还直接显示上面,键值对中的'参数'。在我不工作的PUT方法中,我只将它们看作查询字符串值。我已经将内容类型设置为application/json,所以我不知道问题可能是什么 –

0

好,我解决它...... 我不得不JSON.stringify我的数据对象,这里的新代码:

amplify.request.define('manageSetting', 'ajax', { 
      url: url, 
      dataType: 'json', 
      contentType: 'application/json', 
      decoder: "defaultBehavior", 
      type: httpMethod 
     }); 

     var data = options.settingObject; //this is a js object in the form { key1: value1, key2: value2 } 
     data = data ? JSON.stringify(data) : data; 

     return amplify.request({ 
      resourceId: 'manageSetting', 
      data: data, 
      success: callbacks.success, 
      error: callbacks.error 
     });