如何使用XMLHTTPRequest
将变量发送到服务器?我是否只是将它们添加到GET
请求的网址末尾,例如?variable1=?variable2=
等?
或多或少:
XMLHttpRequest("GET", "blahblah.psp?variable1=?" + var1 + "?variable2=" + var2, true)
答案 0 :(得分:44)
如果你想使用GET将变量传递给服务器,那将是肯定的。记得妥善逃脱(urlencode)!
如果您不希望变量可见,也可以使用POST。
完整的样本将是:
var url = "bla.php";
var params = "somevariable=somevalue&anothervariable=anothervalue";
var http = new XMLHttpRequest();
http.open("GET", url+"?"+params, true);
http.onreadystatechange = function()
{
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(null);
为了测试这个,(使用PHP),您可以var_dump $_GET
查看您检索的内容。
答案 1 :(得分:37)
对于简单的情况,手动格式化查询字符串很好。但是当有很多参数时,它会变得乏味。
您可以编写一个简单的实用程序函数来处理为您构建查询格式。
function formatParams( params ){
return "?" + Object
.keys(params)
.map(function(key){
return key+"="+encodeURIComponent(params[key])
})
.join("&")
}
你会以这种方式使用它来构建请求。
var endpoint = "https://api.example.com/endpoint"
var params = {
a: 1,
b: 2,
c: 3
}
var url = endpoint + formatParams(params)
//=> "https://api.example.com/endpoint?a=1&b=2&c=3"
有许多可用于操作URL的实用程序功能。如果你的项目中有JQuery,你可以尝试http://api.jquery.com/jquery.param/。
它类似于上面的示例函数,但处理递归序列化嵌套对象和数组。
答案 2 :(得分:6)
在GET请求中传递变量的正确格式是
?variable1=value1&variable2=value2&variable3=value3...
^ ---notice &--- ^
但基本上,你有正确的想法。
答案 3 :(得分:1)
以下是正确的方法:
xmlhttp.open("GET","getuser.php?fname="+abc ,true);
答案 4 :(得分:0)
是的,这是使用GET请求执行此操作的正确方法。
但请注意,多个查询字符串参数应使用&
分隔例如。 ?变量1 =值1&安培;变量2 =值2
答案 5 :(得分:0)
怎么样?
function callHttpService(url, params){
// Assume params contains key/value request params
let queryStrings = '';
for(let key in params){
queryStrings += `${key}=${params[key]}&`
}
const fullUrl = `${url}?queryStrings`
//make http request with fullUrl
}
答案 6 :(得分:0)
如果您对字符串连接过敏,并且不需要IE兼容性,则可以使用URL
和URLSearchParams
:
const target = new URL('https://example.com/endpoint');
const params = new URLSearchParams();
params.set('var1', 'foo');
params.set('var2', 'bar');
target.search = params.toString();
console.log(target);
或转换整个对象的参数值:
const paramsObject = {
var1: 'foo',
var2: 'bar'
};
const target = new URL('https://example.com/endpoint');
target.search = new URLSearchParams(paramsObject).toString();
console.log(target);