如何将变量传递给$ .ajax中的webservice

时间:2009-05-30 05:56:31

标签: javascript jquery ajax

我想将参数发送到webservice。该参数需要是一个变量而不是一个固定的字符串。当我编写以下代码时,webservice被称为正常并且执行得很好。

$(document).ready(function() {
  $.ajax({
    type: "POST",
    url: "JsonTestService.asmx/Test",
    data:"{'url':'http://www.cramster.com'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      alert(msg.d);
    }  
  });
});

但是当我将行更改为以下x是变量时,它不起作用。你能告诉我如何在下面的代码中将变量传递给webservice。

data:"{'url':x}",

4 个答案:

答案 0 :(得分:3)

你真的很亲密。不要将数据元素值括在引号中,即:

$(function() {
  var dynamic_url = "http://www.example.com";
  $.ajax({
    type: "POST",
    url: "JsonTestService.asmx/Test",
    data: {
      url: dynamic_url
    },
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      alert(msg.d);
    }
  });
});`

通过将整个批次括在引号中,表达式根本没有被评估。我还建议使用两种语法来传入对象。我认为它更清楚。

答案 1 :(得分:2)

您必须引用整个JSON字符串的原因:

  

在向他们发出的请求中,ASP.NET AJAX脚本服务和页面方法理解并期望将参数序列化为JSON字符串。这些参数从POST数据中解析出来,并用作您调用的方法的参数。

     

但是,如果您直接提供JSON对象作为$ .ajax调用的数据参数,jQuery会将对象序列化为一系列要对其进行POST的k,v对,而不是将原始JSON传递给您的Web服务。

如果您有兴趣,请在this post on common pitfalls when using jQuery with ASP.NET AJAX web services and page methods中提供更多详细信息。

您可能也对using a stringify method to make constructing the JSON string much cleaner感兴趣。

答案 2 :(得分:1)

以下内容应该有效:

$(document).ready(function() {
    var x = 'http://www.cramster.com';

    $.ajax({
        type: "POST",
        url: "JsonTestService.asmx/Test",
        data: { 'url': x },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            alert(msg.d);
        }
    });
})

您需要丢失data参数附近的引号。

答案 3 :(得分:1)

根据jquery文档将完整的json作为字符串是正确的,获取x值的明显解决方案是:

data:"{\"url\":\"" + x + "\"}",