javascript 将javascript数组发送到服务器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/13236115/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Send javascript array to server
提问by Hermann Ingjaldsson
I have an array who's content I would like to get on my server. I have been wading through internet pages trying to find how to do this without succeeding yet.
我有一个我想在我的服务器上获取内容的数组。我一直在浏览网页,试图找到如何做到这一点但没有成功。
Let's imagine I have a server, and that I would like this array in my javascript to go into a file on my server, how would I do that?
让我们假设我有一个服务器,并且我希望我的 javascript 中的这个数组进入我的服务器上的一个文件,我该怎么做?
I have been going through internet pages looking for how to do this and I have come up with the following code:
我一直在浏览网页寻找如何做到这一点,我想出了以下代码:
<html>
<!-- installs jquery and ajax. -->
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script>
var arr = ["one","two","three"];
arr = JSON.stringify(arr);
$.ajax({
url: "http://url_name_here.com",
type: "POST",
data: {
myArray : arr
}
});
alert('hello');
</script>
</html>
回答by adeneo
That's an array, there's no need to stringify it, jQuery will convert the data to a valid querystring for you
这是一个数组,不需要对它进行字符串化,jQuery 会为您将数据转换为有效的查询字符串
var arr=["one","two","three"];
$.ajax({
url: "/urltoMyOwnSite.php",
type: "POST",
data: {myArray : arr}
});
PHP (if that's what you're using)
PHP(如果这是您使用的)
$array = $_POST['myArray'];
回答by DefyGravity
front end stuffs
前端的东西
<html>
<!-- installs jquery and ajax. -->
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script>
$(function(){
var arr = ["one","two","three"];
arr = JSON.stringify(arr);
$.ajax({
url: "http://url_name_here.com",
type: "POST",
data: {
myArray : arr
}
}).done(function(data,text,jQxhr){
alert("success");
});
});
</script>
</html>
back end server (java b/c it's what I have open in dev atm)
后端服务器(java b/c 这是我在 dev atm 中打开的)
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import org.json.simple.JSONObject;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.io.FileOutputStream;
public class MyServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,
IOException
{
JSONObject jsonObj = (JSONObject) org.json.simple.JSONValue.parse(request.getParameter("myArray"));
// write out your file IO.
JSONObject jsonObj = (JSONObject) org.json.simple.JSONValue.parse(request.getParameter("myArray"));
FileOutputStream file = new FileOutputStream(java.io.File.createTempFile("myArray-",Long.toString((new Date()).getTime())));
FileChannel fc = file.getChannel();
ByteBuffer sw = ByteBuffer.allocate(jsonObj.toJSONString().length());
sw.clear();
sw.put(jsonObj.toJSONString().getBytes());
sw.flip();
while(sw.hasRemaining()) {
fc.write(sw);
}
fc.close();
//because its much easier than a flat file, we can write it back in the server response.
org.json.simple.JSONValue.writeJSONString(jsonObj, response.getWriter());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,
IOException
{
doGet(request, response);
}
}
回答by Rory McCrossan
jQuery will stringify the array for you, so you are effectively encoding it twice in your example which is causing your problems. Try this:
jQuery 将为您字符串化数组,因此您在示例中有效地对其进行了两次编码,这导致了您的问题。试试这个:
var arr = ["one","two","three"];
$.ajax({
url: "http://url_name_here.com",
type: "POST",
data: { myArray : arr }
});