2012-02-05 145 views
3

我尝试后通过jQuery.ajax原始字符串()如何通过jQuery POST请求发送原始字符串?

例如,

contact_list=352345 

$.ajax({ 
     beforeSend: function(xhr){ 
      xhr.setRequestHeader('Content-Type', header); 
     } 
     }, 
     url: link, 
     type: type, 
     processData:false, 
     data: data, 
     success: function(data){ 
      console.log(data); 
     } 
    }); 

的我送JSON数据大多数时候,所以header='application/json'

在服务器端,我回显$HTTP_RAW_POST_DATA并看到我的JSON条纹很好。

但是,我有时也想发送标准格式的数据。但是当我设置header='application/x-www-form-urlencoded'$HTTP_RAW_POST_DATA是空的。

ProcessData是错误的,所以不应该只是通过我的字符串?

作为临时解决方法,我只是将标题保留为application/json,并忽略服务器上针对此特定端点的Content-Type

+0

真正令我难以置信的是,在网络检查员看来,请求有效载荷正常运行。例如,contact_list = 352345是否存在......也许这是一个PHP事物,表单数据不会显示在$ HTTP_RAW_POST_DATA中? – speg 2012-02-05 14:46:29

回答

1

无需额外的工作。试试这个:

$.ajax({ 
    url: link, 
    data: data, 
    success: function(data){ 
     console.log(data); 
    } 
}); 

docs

processDataBoolean:

默认:true默认情况下,数据到数据选项传递作为 对象(从技术上讲,任何其他不是字符串)将被处理 并转换成查询字符串,适合默认 内容类型的“application/x-www-form-urlencoded”。如果要发送 DOMDocument或其他未处理的数据,请将此选项设置为false。

+0

嗯,我想我很好奇,为什么它不是通过这个头类型发送我的字符串,但它是为应用程序/ JSON。 – speg 2012-02-05 07:29:08

+0

@speg。这不是解决问题吗?我不明白你写了什么。 – gdoron 2012-02-05 07:33:47

+0

不知道,我现在在床上:)。将在早上尝试。我的意思是,为什么我能够看到HTTP_RAW_POST_DATA,当头文件类型是application/json时,不是application/x-www-form-urlencoded。就好像jquery正在为后面的情况改变它,即使processData仍然是false。 – speg 2012-02-05 07:44:09

1

我宁愿发送一个标志,我的JavaScript函数来查看

所以你的功能将是什么样的输入这样

function processIt(request_type,link,type,data) { 
if(request_type == 'json') 
$.ajax({ 
    beforeSend: function(xhr){ 
     xhr.setRequestHeader('Content-Type', header); 
    } 
    }, 
    url: link, 
    type: type, 
    processData:false, 
    data: data, 
    success: function(data){ 
     console.log(data); 
    } 
}); 
else 
$.ajax({ 
url: link, 
data: data, 
success: function(data){ 
    //do something 
} 
}); 
} 

但这是,如果你想使用的功能它是。

+0

我有点结束了这样做,但我仍然无法将头设置为'application/x-www-form-urlencoded'。如果我这样做,不会传递我的字符串。理想情况下,我希望能够将其设置为服务器端的目的... – speg 2012-02-05 14:44:12