2

我想要工作的代码:

    $.ajax({
        type: "POST",
        url: "_Source/ajap/ajap.nlSrch.php",
        data: { sndJson : jsonData },
        dataType: "json", 
        processData: false,
        success: function(html) {
      $("#srchFrm").append(html);}
    });

有效的代码:

    $.ajax({
        type: "POST",
        url: "_Source/ajap/ajap.nlSrch.php",
        data: { sndJson : jsonData },
        success: function(html) {
      $("#srchFrm").append(html);}
    });

不幸的是,当我发送第一个数据时,我的帖子数据看起来像这样“Array ()”,而当我使用后者时,我得到了这个“Array ([sndJson] => [\"8\",\"3\",\" 6\",\"7\"])"。

我知道必须有一个简单的解释,但我无法弄清楚。

请帮忙!

4

4 回答 4

2

尝试在查询字符串中发送您的数据...

$.ajax({
        type:"POST",
        url:"_Source/ajap/ajap.nlSrch.php?json="+jsonData,
        dataType:"json", 
        success: function(data) {
              $("#srchFrm").append(data);}
        error: function(xhr, ajaxOptions, thrownError)
        {alert("Error!");}
    });
于 2012-06-15T05:19:40.900 回答
1

您可以使用简写 $.post 而不是使用低级 ajax 类 --- 因为您不需要高级处理。所以,这个就足够了。

$(document.ready(function(){    
  $("#submit_button").click(function(){     
    $.post('php_script.php', {
     // here's what you want to send  
     // important -- double quotes, 'cause It's evals as valid JSON
     "var1" : "val1"  
     "var2" : "val2"    
    }, function (respond){
       try {
           var respond = JSON.parse(respond);
        } catch(e){
           //error - respond wasn't JSON
        }
    });  
  });
});

PHP代码:

<?php
/**
 * Here you can handle variable or array you got from JavaScript
 * and send back if need.
 */ 
 print_r($_POST); // var1 = val1, var2 = val2

?>

回到您的问题, 为什么我的 .ajax 请求不起作用? 这是因为 JavaScript 抛出致命错误并停止进一步的代码执行。

您可以捕获并确定错误时机,只需添加

try {} catch(){}阻止您认为可能出现任何错误的语句

于 2012-06-15T06:21:59.787 回答
0

当您指定 dataType: json 时,jQuery 将自动评估响应并返回一个 Javascript 对象,在本例中是一个数组。您正在获取结果并将其作为 html 添加到#srchForm,因此将其转换为 javascript 对象是没有意义的。使用 dataType: html,或者根本不使用。

http://api.jquery.com/jQuery.ajax/

于 2012-06-15T05:13:34.890 回答
0

上面的以下示例不可重复使用。我是可重用代码的忠实粉丝。这是我的解决方案。

软件设计 101:
DRY 不要重复你自己。您应该将代码包装到一个对象中。这样你就可以从任何地方调用它。

var Request = {
    version: 1.0, //not needed but i like versioning things
    xproxy: function(type, url, data, callback, timeout, headers, contentType) 
    {
        if (!timeout || timeout <= 0) { timeout = 15000; }
        $.ajax(
        {
            url: url,
            type: type,
            data: data,
            timeout: timeout,
            contentType: contentType,
            success:function(data) 
            {
                if (callback != undefined) { callback(data); }
            },
            error:function(data) 
            {
                if (callback != undefined) { callback(data); }
            }, 
            beforeSend: function(xhr)
            {
                //headers is a list with two items
                if(headers)
                {
                    xhr.setRequestHeader('secret-key', headers[0]);
                    xhr.setRequestHeader('api-key', headers[1]);
                }
            }
        });
    }
};

用法:

<script type="text/javascript">
var contentType = "applicaiton/json";
var url = "http://api.lastfm.com/get/data/";
var timeout = 1000*5; //five seconds
var requestType = "POST"; //GET, POST, DELETE, PUT

var header = [];
header.push("unique-guid");
header.push("23903820983");

var data = "{\"username\":\"james\"}"; //you should really deserialize this w/ a function
function callback(data)
{
   //do logic here
}
Request.xproxy(requestType, url, data, callback, timeout, header, contentType);
</script>
于 2013-05-16T15:25:27.977 回答