2013-02-01 23 views
1

的“$就”法这是我所知道的关于这个问题:分配对象为“数据”属性在jQuery的

我们必须使我们可以通过像这样属性的对象一个Ajax功能:

var ajaxRequest = {}; 

    ajaxRequest['type'] = 'POST'; 
    ajaxRequest['async'] = false; 
    ajaxRequest['datatype'] = 'json'; 
    ajaxRequest['url'] = '/Query/getMydata'; 

    $.ajax(ajaxRequest); 

这些属性之一是它是由键/值对的数据参数:我试图做这样的事情

ajaxRequest['data'] = {color: 'red' , name: 'Steve' } 

var oData = []; 
    oData['color'] = 'yellow'; 
    oData['name'] = 'Fred'; 

    ajaxRequest['data'] = oData; 

但它不起作用。

所以我的问题是:有一个对象,我可以分配给'数据'参数,或者我被迫建立连接字符串?

编辑==============

也许我没有解释,我知道该方法可以通过这样的代码来创建:

 var ajaxRequest = { 
     type: 'POST', 
     async: false 
     .... 
     }; 

但我使用的对象和属性,因为我需要做的方法“通用”,那么我将添加“如果”是这样的:

function ajaxReq(data){ 
     var ajaxRequest = {}; 

     if(!data.isEmpty()){ 
      ajaxRequest['data'] = data; 
     } 

      ajaxRequest['type'] = 'POST'; 
      ajaxRequest['async'] = false; 
      ajaxRequest['datatype'] = 'json'; 
      ajaxRequest['url'] = '/Query/getMydata'; 

      ... 

      $.ajax(ajaxRequest); 
    } 
+1

不要让它成为一个字符串; 'ajaxRequest ['data'] = {color:'red',name:'Steve'};' – Stefan

+0

我写错了,对不起 – benVG

回答

5

你复杂的方法是完全不必要的。你应该只使用对象文本:

var ajaxRequest = { 
    type: 'POST', 
    async: false 
    datatype: 'json', 
    url: '/Query/getMydata' 
}; 

$.ajax(ajaxRequest); 

您也可以嵌套他们,所以你可以有这样的:

var ajaxRequest = { 
    type: 'POST', 
    async: false 
    datatype: 'json', 
    url: '/Query/getMydata', 
    data: { 
     color: 'yellow', 
     name: 'Fred' 
    } 
}; 

jQuery将转换成一个查询字符串你,让你不需要担心这一点。


额外的澄清...这oData = []是造成问题的原因是[]创建一个数组。在Javascript中,数组是一种特殊的对象。只有带数字键的属性才被视为数组的成员(例如oData[1])。如果您使用的是对象文字({}),您可以像使用ajaxRequest那样使用对象,它可以正常工作。

+0

我已经编辑了这个问题,以说明我想做什么。而且我知道你在答案的第一部分写了什么。我没有注意到我创建了一个数组而不是一个对象Litteral,而你的答案的第二部分解决了我的问题!谢谢! – benVG

+0

@benVG不够公平,但在对象文本中构造尽可能多的元素是有意义的,即那些不变的元素。另请注意,例如,您可以执行'ajaxRequest.url ='/ Query/getMydata'来保存字符和单行代码。 – lonesomeday

+0

我不知道这一点,它一定会帮助我! – benVG